@@ -24,8 +24,10 @@ type (
24
24
clientSettings struct {
25
25
serviceMaddr multiaddr.Multiaddr
26
26
exitInterval time.Duration
27
- commonSettings
27
+ sharedSettings
28
28
}
29
+ clientOption func (* clientSettings ) error
30
+ clientOptions []clientOption
29
31
// defaultClientMaddr distinguishes
30
32
// the default maddr value, from an arbitrary maddr value.
31
33
// I.e. even if the underlying multiaddrs are the same
@@ -34,57 +36,80 @@ type (
34
36
defaultClientMaddr struct { multiaddr.Multiaddr }
35
37
)
36
38
37
- const errServiceNotFound = generic .ConstError ("could not find service instance" )
39
+ const (
40
+ exitIntervalDefault = 30 * time .Second
41
+ errServiceNotFound = generic .ConstError ("could not find service instance" )
42
+ )
38
43
39
- func (set * clientSettings ) getClient (autoLaunchDaemon bool ) (* Client , error ) {
44
+ func (cs * clientSettings ) getClient (autoLaunchDaemon bool ) (* Client , error ) {
40
45
var (
41
- serviceMaddr = set .serviceMaddr
46
+ serviceMaddr = cs .serviceMaddr
42
47
clientOpts []p9.ClientOpt
43
48
)
44
- if set .verbose {
49
+ if cs .verbose {
45
50
// TODO: less fancy prefix and/or out+prefix from CLI flags
46
51
clientLog := log .New (os .Stdout , "⬇️ client - " , log .Lshortfile )
47
52
clientOpts = append (clientOpts , p9 .WithClientLogger (clientLog ))
48
53
}
49
54
if autoLaunchDaemon {
50
55
if _ , wasUnset := serviceMaddr .(defaultClientMaddr ); wasUnset {
51
- return connectOrLaunchLocal (set .exitInterval , clientOpts ... )
56
+ return connectOrLaunchLocal (cs .exitInterval , clientOpts ... )
52
57
}
53
58
}
54
59
return Connect (serviceMaddr , clientOpts ... )
55
60
}
56
61
57
- func (set * clientSettings ) BindFlags (flagSet * flag.FlagSet ) {
58
- set .commonSettings .BindFlags (flagSet )
62
+ func (co * clientOptions ) BindFlags (flagSet * flag.FlagSet ) {
63
+ var sharedOptions sharedOptions
64
+ (& sharedOptions ).BindFlags (flagSet )
65
+ * co = append (* co , func (cs * clientSettings ) error {
66
+ subset , err := sharedOptions .make ()
67
+ if err != nil {
68
+ return err
69
+ }
70
+ cs .sharedSettings = subset
71
+ return nil
72
+ })
59
73
const (
60
- exitFlag = exitAfterFlagName
74
+ exitName = exitAfterFlagName
61
75
exitUsage = "passed to the daemon command if we launch it" +
62
76
"\n (refer to daemon's helptext)"
63
- exitAfterDefault = 30 * time .Second
64
77
)
65
- flagSet .DurationVar (& set .exitInterval , exitFlag , exitAfterDefault , exitUsage )
66
- const (
67
- sockName = serverFlagName
68
- sockUsage = "file system service `maddr`" +
69
- "\n \b " // Newline for default value, sans space.
70
- )
71
- var sockDefaultText string
72
- {
73
- maddrs , err := userServiceMaddrs ()
74
- if err != nil {
75
- panic (err )
76
- }
77
- sockDefault := maddrs [0 ]
78
- sockDefaultText = sockDefault .String ()
79
- set .serviceMaddr = defaultClientMaddr {sockDefault }
78
+ flagSetFunc (flagSet , exitName , exitUsage , co ,
79
+ func (value time.Duration , settings * clientSettings ) error {
80
+ settings .exitInterval = value
81
+ return nil
82
+ })
83
+ flagSet .Lookup (exitName ).
84
+ DefValue = exitIntervalDefault .String ()
85
+ const serverUsage = "file system service `maddr`"
86
+ flagSetFunc (flagSet , serverFlagName , serverUsage , co ,
87
+ func (value multiaddr.Multiaddr , settings * clientSettings ) error {
88
+ settings .serviceMaddr = value
89
+ return nil
90
+ })
91
+ flagSet .Lookup (serverFlagName ).
92
+ DefValue = defaultServerMaddr ().String ()
93
+ }
94
+
95
+ func (co clientOptions ) make () (clientSettings , error ) {
96
+ settings := clientSettings {
97
+ exitInterval : exitIntervalDefault ,
80
98
}
81
- flagSet .Func (sockName , sockUsage , func (s string ) (err error ) {
82
- set .serviceMaddr , err = multiaddr .NewMultiaddr (s )
83
- return
84
- })
85
- setDefaultValueText (flagSet , flagDefaultText {
86
- sockName : sockDefaultText ,
87
- })
99
+ if err := applyOptions (& settings , co ... ); err != nil {
100
+ return clientSettings {}, err
101
+ }
102
+ if err := settings .fillDefaults (); err != nil {
103
+ return clientSettings {}, err
104
+ }
105
+ return settings , nil
106
+ }
107
+
108
+ func (cs * clientSettings ) fillDefaults () error {
109
+ if cs .serviceMaddr == nil {
110
+ cs .serviceMaddr = defaultServerMaddr ()
111
+ }
112
+ return nil
88
113
}
89
114
90
115
func (c * Client ) getListeners () ([]multiaddr.Multiaddr , error ) {
0 commit comments