Skip to content

Commit 6dc9812

Browse files
committed
Add validation for enum types
1 parent 8bbe23e commit 6dc9812

File tree

3 files changed

+46
-20
lines changed

3 files changed

+46
-20
lines changed

kernel/chain_parameters.go

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,11 @@ type ChainParameters struct {
1414
}
1515

1616
func NewChainParameters(chainType ChainType) (*ChainParameters, error) {
17-
var cChainType C.kernel_ChainType
18-
19-
switch chainType {
20-
case ChainTypeMainnet:
21-
cChainType = C.kernel_CHAIN_TYPE_MAINNET
22-
case ChainTypeTestnet:
23-
cChainType = C.kernel_CHAIN_TYPE_TESTNET
24-
case ChainTypeTestnet4:
25-
cChainType = C.kernel_CHAIN_TYPE_TESTNET_4
26-
case ChainTypeSignet:
27-
cChainType = C.kernel_CHAIN_TYPE_SIGNET
28-
case ChainTypeRegtest:
29-
cChainType = C.kernel_CHAIN_TYPE_REGTEST
30-
default:
31-
return nil, ErrInvalidChainType
17+
cType, err := chainType.c()
18+
if err != nil {
19+
return nil, err
3220
}
33-
34-
ptr := C.kernel_chain_parameters_create(cChainType)
21+
ptr := C.kernel_chain_parameters_create(cType)
3522
if ptr == nil {
3623
return nil, ErrKernelChainParametersCreate
3724
}
@@ -71,3 +58,10 @@ const (
7158
ChainTypeSignet
7259
ChainTypeRegtest
7360
)
61+
62+
func (t ChainType) c() (C.kernel_ChainType, error) {
63+
if t < ChainTypeMainnet || t > ChainTypeRegtest {
64+
return 0, ErrInvalidChainType
65+
}
66+
return C.kernel_ChainType(t), nil
67+
}

kernel/errors.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ var (
4242
ErrKernelContextOptionsCreate = &KernelError{Operation: "kernel_context_options_create"}
4343

4444
ErrInvalidChainType = errors.New("invalid chain type")
45+
ErrInvalidLogLevel = errors.New("invalid log level")
46+
ErrInvalidLogCategory = errors.New("invalid log category")
4547
ErrEmptyBlockData = errors.New("empty block data")
4648
ErrEmptyScriptPubkeyData = errors.New("empty script pubkey data")
4749
ErrEmptyTransactionData = errors.New("empty transaction data")

kernel/logging_connection.go

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,21 +119,21 @@ var loggingMutex = sync.RWMutex{}
119119
func AddLogLevelCategory(category LogCategory, level LogLevel) {
120120
loggingMutex.Lock()
121121
defer loggingMutex.Unlock()
122-
C.kernel_add_log_level_category(C.kernel_LogCategory(category), C.kernel_LogLevel(level))
122+
C.kernel_add_log_level_category(category.mustC(), level.mustC())
123123
}
124124

125125
// EnableLogCategory enables logging for a specific category or all categories
126126
func EnableLogCategory(category LogCategory) {
127127
loggingMutex.Lock()
128128
defer loggingMutex.Unlock()
129-
C.kernel_enable_log_category(C.kernel_LogCategory(category))
129+
C.kernel_enable_log_category(category.mustC())
130130
}
131131

132132
// DisableLogCategory disables logging for a specific category or all categories
133133
func DisableLogCategory(category LogCategory) {
134134
loggingMutex.Lock()
135135
defer loggingMutex.Unlock()
136-
C.kernel_disable_log_category(C.kernel_LogCategory(category))
136+
C.kernel_disable_log_category(category.mustC())
137137
}
138138

139139
// LogLevel represents the logging level
@@ -145,6 +145,21 @@ const (
145145
LogLevelInfo
146146
)
147147

148+
func (l LogLevel) mustC() C.kernel_LogLevel {
149+
c, err := l.c()
150+
if err != nil {
151+
panic(err)
152+
}
153+
return c
154+
}
155+
156+
func (l LogLevel) c() (C.kernel_LogLevel, error) {
157+
if l < LogLevelTrace || l > LogLevelInfo {
158+
return 0, ErrInvalidLogLevel
159+
}
160+
return C.kernel_LogLevel(l), nil
161+
}
162+
148163
// LogCategory represents a logging category
149164
type LogCategory int
150165

@@ -162,6 +177,21 @@ const (
162177
LogKernel
163178
)
164179

180+
func (c LogCategory) mustC() C.kernel_LogCategory {
181+
cType, err := c.c()
182+
if err != nil {
183+
panic(err)
184+
}
185+
return cType
186+
}
187+
188+
func (c LogCategory) c() (C.kernel_LogCategory, error) {
189+
if c < LogAll || c > LogKernel {
190+
return 0, ErrInvalidLogCategory
191+
}
192+
return C.kernel_LogCategory(c), nil
193+
}
194+
165195
// LoggingOptions configures the format of log messages
166196
type LoggingOptions struct {
167197
LogTimestamps bool // Prepend a timestamp to log messages

0 commit comments

Comments
 (0)