module TypedOperation::Operations::Parameters

def named_param(name, signature = :any, **options, &converter)

Parameter for a keyword or named argument
def named_param(name, signature = :any, **options, &converter)
  param(name, signature, **options.merge(positional: false), &converter)
end

def optional(type_signature)

Wrap a type signature in a NilableType meaning it is optional to TypedOperation
def optional(type_signature)
  Literal::Types::NilableType.new(type_signature)
end

def param(name, signature = :any, **options, &converter)

Required, but you can set a default or use optional: true if you want optional
Parameter for keyword argument, or a positional argument if you use positional: true
def param(name, signature = :any, **options, &converter)
  AttributeBuilder.new(self, name, signature, options).define(&converter)
end

def positional_param(name, signature = :any, **options, &converter)

Parameter for positional argument
def positional_param(name, signature = :any, **options, &converter)
  param(name, signature, **options.merge(positional: true), &converter)
end