mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-04-26 21:05:30 +00:00
Merge pull request #23 from jwetzell/feat/configurable-number-parsing
make base and bitsize configurable for number parsers
This commit is contained in:
@@ -9,7 +9,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type FloatParse struct {
|
type FloatParse struct {
|
||||||
config config.ProcessorConfig
|
BitSize int
|
||||||
|
config config.ProcessorConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fp *FloatParse) Process(ctx context.Context, payload any) (any, error) {
|
func (fp *FloatParse) Process(ctx context.Context, payload any) (any, error) {
|
||||||
@@ -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
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type IntParse struct {
|
type IntParse struct {
|
||||||
config config.ProcessorConfig
|
Base int
|
||||||
|
BitSize int
|
||||||
|
config config.ProcessorConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ip *IntParse) Process(ctx context.Context, payload any) (any, error) {
|
func (ip *IntParse) Process(ctx context.Context, payload any) (any, error) {
|
||||||
@@ -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
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type UintParse struct {
|
type UintParse struct {
|
||||||
config config.ProcessorConfig
|
Base int
|
||||||
|
BitSize int
|
||||||
|
config config.ProcessorConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (up *UintParse) Process(ctx context.Context, payload any) (any, error) {
|
func (up *UintParse) Process(ctx context.Context, payload any) (any, error) {
|
||||||
@@ -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
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user