Sha256: e008aebfb596f21298f7e01395d36d0367e655de6ac961f146703ddbeb69f68a

Contents?: true

Size: 854 Bytes

Versions: 1

Compression:

Stored size: 854 Bytes

Contents

# typed: strict

module Typed
  module Coercion
    class BooleanCoercer < Coercer
      extend T::Generic

      Target = type_member { {fixed: T::Boolean} }

      sig { override.params(type: Field::Type).returns(T::Boolean) }
      def used_for_type?(type)
        type == T::Utils.coerce(T::Boolean)
      end

      sig { override.params(type: Field::Type, value: Value).returns(Result[Target, CoercionError]) }
      def coerce(type:, value:)
        if T.cast(type, T::Types::Base).recursively_valid?(value)
          Success.new(value)
        elsif value == "true"
          Success.new(true)
        elsif value == "false"
          Success.new(false)
        else
          Failure.new(CoercionError.new)
        end
      rescue TypeError
        Failure.new(CoercionError.new("Field type must be a T::Boolean."))
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sorbet-schema-0.4.0 lib/typed/coercion/boolean_coercer.rb