@@ -35,20 +35,23 @@ func New[T transaction.Tx](
35
35
cfgOptions : cfgOptions ,
36
36
}
37
37
38
- serverCfg := srv . Config ().( * Config )
38
+ serverCfg := DefaultConfig ( )
39
39
if len (cfg ) > 0 {
40
- if err := serverv2 .UnmarshalSubConfig (cfg , srv . Name (), & serverCfg ); err != nil {
40
+ if err := serverv2 .UnmarshalSubConfig (cfg , ServerName , serverCfg ); err != nil {
41
41
return nil , fmt .Errorf ("failed to unmarshal config: %w" , err )
42
42
}
43
43
}
44
+ for _ , opt := range cfgOptions {
45
+ opt (serverCfg )
46
+ }
44
47
srv .config = serverCfg
45
48
46
49
if err := srv .config .Validate (); err != nil {
47
50
return nil , err
48
51
}
49
52
50
53
mux := http .NewServeMux ()
51
- mux .Handle ("/swagger/ " , & swaggerHandler {
54
+ mux .Handle ("/swagger" , & swaggerHandler {
52
55
swaggerFS : srv .config .SwaggerUI ,
53
56
})
54
57
@@ -58,4 +61,46 @@ func New[T transaction.Tx](
58
61
}
59
62
60
63
return srv , nil
64
+ }
65
+
66
+ // Name returns the server's name
67
+ func (s * Server [T ]) Name () string {
68
+ return ServerName
69
+ }
70
+
71
+ // Config returns the server configuration
72
+ func (s * Server [T ]) Config () any {
73
+ if s .config == nil {
74
+ cfg := DefaultConfig ()
75
+ for _ , opt := range s .cfgOptions {
76
+ opt (cfg )
77
+ }
78
+ return cfg
79
+ }
80
+ return s .config
81
+ }
82
+
83
+ // Start starts the server
84
+ func (s * Server [T ]) Start (ctx context.Context ) error {
85
+ if ! s .config .Enable {
86
+ s .logger .Info (fmt .Sprintf ("%s server is disabled via config" , s .Name ()))
87
+ return nil
88
+ }
89
+
90
+ s .logger .Info ("starting swagger server..." , "address" , s .config .Address )
91
+ if err := s .server .ListenAndServe (); err != nil && err != http .ErrServerClosed {
92
+ return fmt .Errorf ("failed to start swagger server: %w" , err )
93
+ }
94
+
95
+ return nil
96
+ }
97
+
98
+ // Stop stops the server
99
+ func (s * Server [T ]) Stop (ctx context.Context ) error {
100
+ if ! s .config .Enable {
101
+ return nil
102
+ }
103
+
104
+ s .logger .Info ("stopping swagger server..." , "address" , s .config .Address )
105
+ return s .server .Shutdown (ctx )
61
106
}
0 commit comments