in go/showcase/pkg/showcase/part1/types.go [59:84]
func Types(_ statefun.Context, message statefun.Message) error {
// All values, including messages and storage values, are handled via StateFun's type system.
// StateFun ships built-in primitive types that handles de-/serialization of messages across
// functions:
if message.IsBool() {
fmt.Printf("I've got a message with a boolean %v", message.AsBool())
} else if message.IsInt32() {
fmt.Printf("I've got a message with an int32 %v", message.AsInt32())
} else if message.IsInt64() {
fmt.Printf("I've got a message with an int64 %v", message.AsInt64())
} else if message.IsFloat32() {
fmt.Printf("I've got a message with a float32 %v", message.AsFloat32())
} else if message.IsFloat64() {
fmt.Printf("I've got a message with a float64 %v", message.AsFloat64())
} else if message.IsString() {
fmt.Printf("I've got a message with a string %v", message.AsString())
} else if message.Is(UserLoginType) {
var login UserLogin
if err := message.As(UserLoginType, &login); err != nil {
return fmt.Errorf("failed to deserialize user login: %w", err)
}
fmt.Printf("I've got a message with a login event %s", login)
}
return nil
}