2020-07-24 07:59:49 +00:00
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
2021-10-14 19:51:28 +00:00
// Code generated by tailscale.com/cmd/cloner; DO NOT EDIT.
//go:generate go run tailscale.com/cmd/cloner -type=User,Node,Hostinfo,NetInfo,Login,DNSConfig,RegisterResponse,DERPRegion,DERPMap,DERPNode -output=tailcfg_clone.go -clonefunc
2020-07-24 07:59:49 +00:00
package tailcfg
import (
2020-09-04 22:19:54 +00:00
"inet.af/netaddr"
2021-08-05 21:05:24 +00:00
"tailscale.com/types/dnstype"
2021-09-03 20:17:46 +00:00
"tailscale.com/types/key"
2020-09-04 22:19:54 +00:00
"tailscale.com/types/opt"
"tailscale.com/types/structs"
2020-07-24 07:59:49 +00:00
"time"
)
// Clone makes a deep copy of User.
// The result aliases no memory with the original.
func ( src * User ) Clone ( ) * User {
if src == nil {
return nil
}
dst := new ( User )
* dst = * src
2020-07-27 17:40:34 +00:00
dst . Logins = append ( src . Logins [ : 0 : 0 ] , src . Logins ... )
2020-07-24 07:59:49 +00:00
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _UserCloneNeedsRegeneration = User ( struct {
2020-09-04 22:19:54 +00:00
ID UserID
LoginName string
DisplayName string
ProfilePicURL string
Domain string
Logins [ ] LoginID
Created time . Time
} { } )
2020-07-24 07:59:49 +00:00
// Clone makes a deep copy of Node.
// The result aliases no memory with the original.
func ( src * Node ) Clone ( ) * Node {
if src == nil {
return nil
}
dst := new ( Node )
* dst = * src
2020-07-27 17:40:34 +00:00
dst . Addresses = append ( src . Addresses [ : 0 : 0 ] , src . Addresses ... )
dst . AllowedIPs = append ( src . AllowedIPs [ : 0 : 0 ] , src . AllowedIPs ... )
dst . Endpoints = append ( src . Endpoints [ : 0 : 0 ] , src . Endpoints ... )
2022-02-15 16:19:44 +00:00
dst . Hostinfo = src . Hostinfo
2021-10-20 21:26:31 +00:00
dst . Tags = append ( src . Tags [ : 0 : 0 ] , src . Tags ... )
2021-07-27 15:01:29 +00:00
dst . PrimaryRoutes = append ( src . PrimaryRoutes [ : 0 : 0 ] , src . PrimaryRoutes ... )
2020-07-24 07:59:49 +00:00
if dst . LastSeen != nil {
dst . LastSeen = new ( time . Time )
* dst . LastSeen = * src . LastSeen
}
2021-04-15 23:03:59 +00:00
if dst . Online != nil {
dst . Online = new ( bool )
* dst . Online = * src . Online
}
2021-04-01 21:03:34 +00:00
dst . Capabilities = append ( src . Capabilities [ : 0 : 0 ] , src . Capabilities ... )
2020-07-24 07:59:49 +00:00
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _NodeCloneNeedsRegeneration = Node ( struct {
2021-01-27 16:50:31 +00:00
ID NodeID
StableID StableNodeID
Name string
User UserID
Sharer UserID
2021-11-02 03:55:52 +00:00
Key key . NodePublic
2021-01-27 16:50:31 +00:00
KeyExpiry time . Time
2021-09-03 20:17:46 +00:00
Machine key . MachinePublic
2021-11-02 21:41:56 +00:00
DiscoKey key . DiscoPublic
2021-01-27 16:50:31 +00:00
Addresses [ ] netaddr . IPPrefix
AllowedIPs [ ] netaddr . IPPrefix
Endpoints [ ] string
DERP string
2022-02-15 16:19:44 +00:00
Hostinfo HostinfoView
2021-01-27 16:50:31 +00:00
Created time . Time
2021-10-20 21:26:31 +00:00
Tags [ ] string
2021-07-27 15:01:29 +00:00
PrimaryRoutes [ ] netaddr . IPPrefix
2021-01-27 16:50:31 +00:00
LastSeen * time . Time
2021-04-15 23:03:59 +00:00
Online * bool
2021-01-27 16:50:31 +00:00
KeepAlive bool
MachineAuthorized bool
2021-04-01 21:03:34 +00:00
Capabilities [ ] string
2021-01-27 16:50:31 +00:00
ComputedName string
computedHostIfDifferent string
ComputedNameWithHost string
2020-09-04 22:19:54 +00:00
} { } )
2020-07-27 17:40:34 +00:00
// Clone makes a deep copy of Hostinfo.
// The result aliases no memory with the original.
func ( src * Hostinfo ) Clone ( ) * Hostinfo {
if src == nil {
return nil
}
dst := new ( Hostinfo )
* dst = * src
dst . RoutableIPs = append ( src . RoutableIPs [ : 0 : 0 ] , src . RoutableIPs ... )
dst . RequestTags = append ( src . RequestTags [ : 0 : 0 ] , src . RequestTags ... )
dst . Services = append ( src . Services [ : 0 : 0 ] , src . Services ... )
dst . NetInfo = src . NetInfo . Clone ( )
2022-02-17 23:00:41 +00:00
dst . SSH_HostKeys = append ( src . SSH_HostKeys [ : 0 : 0 ] , src . SSH_HostKeys ... )
2020-07-27 17:40:34 +00:00
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _HostinfoCloneNeedsRegeneration = Hostinfo ( struct {
2020-09-04 22:19:54 +00:00
IPNVersion string
FrontendLogID string
BackendLogID string
OS string
OSVersion string
2021-02-15 20:58:56 +00:00
Package string
2020-09-04 22:19:54 +00:00
DeviceModel string
Hostname string
2020-11-24 15:51:13 +00:00
ShieldsUp bool
2020-12-01 02:05:51 +00:00
ShareeNode bool
2020-09-04 22:19:54 +00:00
GoArch string
2020-12-24 20:33:55 +00:00
RoutableIPs [ ] netaddr . IPPrefix
2020-09-04 22:19:54 +00:00
RequestTags [ ] string
Services [ ] Service
NetInfo * NetInfo
2022-02-17 23:00:41 +00:00
SSH_HostKeys [ ] string
2020-09-04 22:19:54 +00:00
} { } )
2020-07-24 07:59:49 +00:00
// Clone makes a deep copy of NetInfo.
// The result aliases no memory with the original.
func ( src * NetInfo ) Clone ( ) * NetInfo {
if src == nil {
return nil
}
dst := new ( NetInfo )
* dst = * src
if dst . DERPLatency != nil {
dst . DERPLatency = map [ string ] float64 { }
for k , v := range src . DERPLatency {
dst . DERPLatency [ k ] = v
}
}
return dst
}
2020-08-21 12:31:19 +00:00
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _NetInfoCloneNeedsRegeneration = NetInfo ( struct {
2020-09-04 22:19:54 +00:00
MappingVariesByDestIP opt . Bool
HairPinning opt . Bool
WorkingIPv6 opt . Bool
WorkingUDP opt . Bool
2021-03-09 23:09:10 +00:00
HavePortMap bool
2020-09-04 22:19:54 +00:00
UPnP opt . Bool
PMP opt . Bool
PCP opt . Bool
PreferredDERP int
LinkType string
DERPLatency map [ string ] float64
} { } )
2020-09-04 11:41:30 +00:00
// Clone makes a deep copy of Login.
// The result aliases no memory with the original.
func ( src * Login ) Clone ( ) * Login {
if src == nil {
return nil
}
dst := new ( Login )
* dst = * src
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _LoginCloneNeedsRegeneration = Login ( struct {
2020-09-04 22:19:54 +00:00
_ structs . Incomparable
ID LoginID
Provider string
LoginName string
DisplayName string
ProfilePicURL string
Domain string
} { } )
2020-09-04 11:41:30 +00:00
// Clone makes a deep copy of DNSConfig.
// The result aliases no memory with the original.
func ( src * DNSConfig ) Clone ( ) * DNSConfig {
if src == nil {
return nil
}
dst := new ( DNSConfig )
* dst = * src
2021-08-05 21:05:24 +00:00
dst . Resolvers = make ( [ ] dnstype . Resolver , len ( src . Resolvers ) )
2021-04-08 08:35:14 +00:00
for i := range dst . Resolvers {
dst . Resolvers [ i ] = * src . Resolvers [ i ] . Clone ( )
}
if dst . Routes != nil {
2021-08-05 21:05:24 +00:00
dst . Routes = map [ string ] [ ] dnstype . Resolver { }
2021-04-08 08:35:14 +00:00
for k := range src . Routes {
2021-08-05 21:05:24 +00:00
dst . Routes [ k ] = append ( [ ] dnstype . Resolver { } , src . Routes [ k ] ... )
2021-04-08 08:35:14 +00:00
}
}
2021-08-05 21:05:24 +00:00
dst . FallbackResolvers = make ( [ ] dnstype . Resolver , len ( src . FallbackResolvers ) )
2021-04-20 04:30:39 +00:00
for i := range dst . FallbackResolvers {
dst . FallbackResolvers [ i ] = * src . FallbackResolvers [ i ] . Clone ( )
}
2020-09-04 11:41:30 +00:00
dst . Domains = append ( src . Domains [ : 0 : 0 ] , src . Domains ... )
2021-04-08 08:35:14 +00:00
dst . Nameservers = append ( src . Nameservers [ : 0 : 0 ] , src . Nameservers ... )
2021-06-15 19:12:15 +00:00
dst . CertDomains = append ( src . CertDomains [ : 0 : 0 ] , src . CertDomains ... )
2021-06-16 17:58:25 +00:00
dst . ExtraRecords = append ( src . ExtraRecords [ : 0 : 0 ] , src . ExtraRecords ... )
2021-11-29 22:18:09 +00:00
dst . ExitNodeFilteredSet = append ( src . ExitNodeFilteredSet [ : 0 : 0 ] , src . ExitNodeFilteredSet ... )
2020-09-04 11:41:30 +00:00
return dst
}
2020-09-04 22:19:54 +00:00
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _DNSConfigCloneNeedsRegeneration = DNSConfig ( struct {
2021-11-29 22:18:09 +00:00
Resolvers [ ] dnstype . Resolver
Routes map [ string ] [ ] dnstype . Resolver
FallbackResolvers [ ] dnstype . Resolver
Domains [ ] string
Proxied bool
Nameservers [ ] netaddr . IP
PerDomain bool
CertDomains [ ] string
ExtraRecords [ ] DNSRecord
ExitNodeFilteredSet [ ] string
2021-04-08 08:35:14 +00:00
} { } )
2020-10-06 18:02:57 +00:00
// Clone makes a deep copy of RegisterResponse.
// The result aliases no memory with the original.
func ( src * RegisterResponse ) Clone ( ) * RegisterResponse {
if src == nil {
return nil
}
dst := new ( RegisterResponse )
* dst = * src
dst . User = * src . User . Clone ( )
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _RegisterResponseCloneNeedsRegeneration = RegisterResponse ( struct {
2020-10-06 18:02:57 +00:00
User User
Login Login
NodeKeyExpired bool
MachineAuthorized bool
AuthURL string
2021-10-26 17:19:35 +00:00
Error string
2020-10-06 18:02:57 +00:00
} { } )
2021-06-23 05:01:11 +00:00
// Clone makes a deep copy of DERPRegion.
// The result aliases no memory with the original.
func ( src * DERPRegion ) Clone ( ) * DERPRegion {
if src == nil {
return nil
}
dst := new ( DERPRegion )
* dst = * src
dst . Nodes = make ( [ ] * DERPNode , len ( src . Nodes ) )
for i := range dst . Nodes {
dst . Nodes [ i ] = src . Nodes [ i ] . Clone ( )
}
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _DERPRegionCloneNeedsRegeneration = DERPRegion ( struct {
2021-06-23 05:01:11 +00:00
RegionID int
RegionCode string
RegionName string
Avoid bool
Nodes [ ] * DERPNode
} { } )
// Clone makes a deep copy of DERPMap.
// The result aliases no memory with the original.
func ( src * DERPMap ) Clone ( ) * DERPMap {
if src == nil {
return nil
}
dst := new ( DERPMap )
* dst = * src
if dst . Regions != nil {
dst . Regions = map [ int ] * DERPRegion { }
for k , v := range src . Regions {
dst . Regions [ k ] = v . Clone ( )
}
}
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _DERPMapCloneNeedsRegeneration = DERPMap ( struct {
2021-06-22 23:24:32 +00:00
Regions map [ int ] * DERPRegion
OmitDefaultRegions bool
2021-06-23 05:01:11 +00:00
} { } )
// Clone makes a deep copy of DERPNode.
// The result aliases no memory with the original.
func ( src * DERPNode ) Clone ( ) * DERPNode {
if src == nil {
return nil
}
dst := new ( DERPNode )
* dst = * src
return dst
}
2021-09-15 17:05:34 +00:00
// A compilation failure here means this code must be regenerated, with the command at the top of this file.
2021-09-16 22:58:43 +00:00
var _DERPNodeCloneNeedsRegeneration = DERPNode ( struct {
2021-07-09 18:16:43 +00:00
Name string
RegionID int
HostName string
CertName string
IPv4 string
IPv6 string
STUNPort int
STUNOnly bool
DERPPort int
InsecureForTests bool
STUNTestIP string
2021-06-23 05:01:11 +00:00
} { } )
2020-09-04 22:19:54 +00:00
// Clone duplicates src into dst and reports whether it succeeded.
// To succeed, <src, dst> must be of types <*T, *T> or <*T, **T>,
2021-08-05 21:05:24 +00:00
// where T is one of User,Node,Hostinfo,NetInfo,Login,DNSConfig,RegisterResponse,DERPRegion,DERPMap,DERPNode.
2020-09-04 22:19:54 +00:00
func Clone ( dst , src interface { } ) bool {
switch src := src . ( type ) {
case * User :
switch dst := dst . ( type ) {
case * User :
* dst = * src . Clone ( )
return true
case * * User :
* dst = src . Clone ( )
return true
}
case * Node :
switch dst := dst . ( type ) {
case * Node :
* dst = * src . Clone ( )
return true
case * * Node :
* dst = src . Clone ( )
return true
}
case * Hostinfo :
switch dst := dst . ( type ) {
case * Hostinfo :
* dst = * src . Clone ( )
return true
case * * Hostinfo :
* dst = src . Clone ( )
return true
}
case * NetInfo :
switch dst := dst . ( type ) {
case * NetInfo :
* dst = * src . Clone ( )
return true
case * * NetInfo :
* dst = src . Clone ( )
return true
}
case * Login :
switch dst := dst . ( type ) {
case * Login :
* dst = * src . Clone ( )
return true
case * * Login :
* dst = src . Clone ( )
return true
}
case * DNSConfig :
switch dst := dst . ( type ) {
case * DNSConfig :
* dst = * src . Clone ( )
return true
case * * DNSConfig :
* dst = src . Clone ( )
return true
}
2020-10-06 18:02:57 +00:00
case * RegisterResponse :
switch dst := dst . ( type ) {
case * RegisterResponse :
* dst = * src . Clone ( )
return true
case * * RegisterResponse :
* dst = src . Clone ( )
return true
}
2021-06-23 05:01:11 +00:00
case * DERPRegion :
switch dst := dst . ( type ) {
case * DERPRegion :
* dst = * src . Clone ( )
return true
case * * DERPRegion :
* dst = src . Clone ( )
return true
}
case * DERPMap :
switch dst := dst . ( type ) {
case * DERPMap :
* dst = * src . Clone ( )
return true
case * * DERPMap :
* dst = src . Clone ( )
return true
}
case * DERPNode :
switch dst := dst . ( type ) {
case * DERPNode :
* dst = * src . Clone ( )
return true
case * * DERPNode :
* dst = src . Clone ( )
return true
}
2020-09-04 22:19:54 +00:00
}
return false
}