Merge pull request #23 from jwetzell/feat/configurable-number-parsing

make base and bitsize configurable for number parsers
This commit is contained in:
Joel Wetzell
2025-12-24 10:35:06 -06:00
committed by GitHub
3 changed files with 75 additions and 12 deletions

View File

@@ -9,6 +9,7 @@ import (
) )
type FloatParse struct { type FloatParse struct {
BitSize int
config config.ProcessorConfig config config.ProcessorConfig
} }
@@ -19,8 +20,7 @@ func (fp *FloatParse) Process(ctx context.Context, payload any) (any, error) {
return nil, errors.New("float.parse processor only accepts a string") return nil, errors.New("float.parse processor only accepts a string")
} }
// TODO(jwetzell): make bitSize configurable payloadFloat, err := strconv.ParseFloat(payloadString, fp.BitSize)
payloadFloat, err := strconv.ParseFloat(payloadString, 64)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -35,7 +35,19 @@ func init() {
RegisterProcessor(ProcessorRegistration{ RegisterProcessor(ProcessorRegistration{
Type: "float.parse", Type: "float.parse",
New: func(config config.ProcessorConfig) (Processor, error) { New: func(config config.ProcessorConfig) (Processor, error) {
return &FloatParse{config: config}, nil params := config.Params
bitSizeNum := 64
bitSize, ok := params["bitSize"]
if ok {
bitSizeFloat, ok := bitSize.(float64)
if !ok {
return nil, errors.New("float.parse bitSize must be a number")
}
bitSizeNum = int(bitSizeFloat)
}
return &FloatParse{config: config, BitSize: bitSizeNum}, nil
}, },
}) })
} }

View File

@@ -9,6 +9,8 @@ import (
) )
type IntParse struct { type IntParse struct {
Base int
BitSize int
config config.ProcessorConfig config config.ProcessorConfig
} }
@@ -19,8 +21,7 @@ func (ip *IntParse) Process(ctx context.Context, payload any) (any, error) {
return nil, errors.New("int.parse processor only accepts a string") return nil, errors.New("int.parse processor only accepts a string")
} }
// TODO(jwetzell): make base and bitSize configurable payloadInt, err := strconv.ParseInt(payloadString, ip.Base, ip.BitSize)
payloadInt, err := strconv.ParseInt(payloadString, 10, 64)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -35,7 +36,32 @@ func init() {
RegisterProcessor(ProcessorRegistration{ RegisterProcessor(ProcessorRegistration{
Type: "int.parse", Type: "int.parse",
New: func(config config.ProcessorConfig) (Processor, error) { New: func(config config.ProcessorConfig) (Processor, error) {
return &IntParse{config: config}, nil params := config.Params
baseNum := 10
base, ok := params["base"]
if ok {
baseFloat, ok := base.(float64)
if !ok {
return nil, errors.New("int.parse base must be a number")
}
baseNum = int(baseFloat)
}
bitSizeNum := 64
bitSize, ok := params["bitSize"]
if ok {
bitSizeFloat, ok := bitSize.(float64)
if !ok {
return nil, errors.New("int.parse bitSize must be a number")
}
bitSizeNum = int(bitSizeFloat)
}
return &IntParse{config: config, Base: baseNum, BitSize: bitSizeNum}, nil
}, },
}) })
} }

View File

@@ -9,6 +9,8 @@ import (
) )
type UintParse struct { type UintParse struct {
Base int
BitSize int
config config.ProcessorConfig config config.ProcessorConfig
} }
@@ -19,8 +21,7 @@ func (up *UintParse) Process(ctx context.Context, payload any) (any, error) {
return nil, errors.New("uint.parse processor only accepts a string") return nil, errors.New("uint.parse processor only accepts a string")
} }
// TODO(jwetzell): make base and bitSize configurable payloadUint, err := strconv.ParseUint(payloadString, up.Base, up.BitSize)
payloadUint, err := strconv.ParseUint(payloadString, 10, 64)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -35,7 +36,31 @@ func init() {
RegisterProcessor(ProcessorRegistration{ RegisterProcessor(ProcessorRegistration{
Type: "uint.parse", Type: "uint.parse",
New: func(config config.ProcessorConfig) (Processor, error) { New: func(config config.ProcessorConfig) (Processor, error) {
return &UintParse{config: config}, nil params := config.Params
baseNum := 10
base, ok := params["base"]
if ok {
baseFloat, ok := base.(float64)
if !ok {
return nil, errors.New("uint.parse base must be a number")
}
baseNum = int(baseFloat)
}
bitSizeNum := 64
bitSize, ok := params["bitSize"]
if ok {
bitSizeFloat, ok := bitSize.(float64)
if !ok {
return nil, errors.New("uint.parse bitSize must be a number")
}
bitSizeNum = int(bitSizeFloat)
}
return &UintParse{config: config, Base: baseNum, BitSize: bitSizeNum}, nil
}, },
}) })
} }