MCPcopy Create free account
hub / github.com/cel-expr/cel-go / optFlatMap

Function optFlatMap

cel/library.go:651–691  ·  view source on GitHub ↗
(meh MacroExprFactory, target ast.Expr, args []ast.Expr)

Source from the content-addressed store, hash-verified

649}
650
651func optFlatMap(meh MacroExprFactory, target ast.Expr, args []ast.Expr) (ast.Expr, *Error) {
652 varIdent := args[0]
653 varName := ""
654 switch varIdent.Kind() {
655 case ast.IdentKind:
656 varName = varIdent.AsIdent()
657 default:
658 return nil, meh.NewError(varIdent.ID(), "optFlatMap() variable name must be a simple identifier")
659 }
660 mapExpr := args[1]
661 targetIdent := target
662 if target.Kind() != ast.IdentKind {
663 targetIdent = meh.NewIdent(targetVar)
664 }
665 res := meh.NewCall(
666 operators.Conditional,
667 meh.NewMemberCall(hasValueFunc, targetIdent),
668 meh.NewComprehension(
669 meh.NewList(),
670 unusedIterVar,
671 varName,
672 meh.NewMemberCall(valueFunc, meh.Copy(targetIdent)),
673 meh.NewLiteral(types.False),
674 meh.NewIdent(varName),
675 mapExpr,
676 ),
677 meh.NewCall(optionalNoneFunc),
678 )
679 if target.Kind() != ast.IdentKind {
680 return meh.NewComprehension(
681 meh.NewList(),
682 unusedIterVar,
683 targetVar,
684 target,
685 meh.NewLiteral(types.False),
686 meh.NewIdent(targetVar),
687 res,
688 ), nil
689 }
690 return res, nil
691}
692
693func optUnwrap(value ref.Val) ref.Val {
694 list := value.(traits.Lister)

Callers

nothing calls this directly

Calls 11

KindMethod · 0.65
AsIdentMethod · 0.65
NewErrorMethod · 0.65
IDMethod · 0.65
NewIdentMethod · 0.65
NewCallMethod · 0.65
NewMemberCallMethod · 0.65
NewComprehensionMethod · 0.65
NewListMethod · 0.65
CopyMethod · 0.65
NewLiteralMethod · 0.65

Tested by

no test coverage detected