Sha256: bdcf4f5ea09971919bc75ad6a94cf7bf7f0c214da474d4e8fafd7d8d306ee063
Contents?: true
Size: 1.75 KB
Versions: 3
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true module Dry module Types # PrimitiveInferrer returns the list of classes matching a type. # # @api public class PrimitiveInferrer extend Core::Cache # Compiler reduces type AST into a list of primitives # # @api private class Compiler # @api private def visit(node) meth, rest = node public_send(:"visit_#{meth}", rest) end # @api private def visit_nominal(node) type, _ = node type end # @api private def visit_hash(_) = ::Hash alias_method :visit_schema, :visit_hash # @api private def visit_array(_) = ::Array # @api private def visit_lax(node) = visit(node) # @api private def visit_constructor(node) other, * = node visit(other) end # @api private def visit_enum(node) other, * = node visit(other) end # @api private def visit_sum(node) left, right = node [visit(left), visit(right)].flatten(1) end # @api private def visit_constrained(node) other, * = node visit(other) end # @api private def visit_any(_) = ::Object end # @return [Compiler] # @api private attr_reader :compiler # @api private def initialize @compiler = Compiler.new end # Infer primitives from the provided type # # @return [Array[Class]] # # @api private def [](type) self.class.fetch_or_store(type) do Array(compiler.visit(type.to_ast)).freeze end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dry-types-1.8.2 | lib/dry/types/primitive_inferrer.rb |
dry-types-1.8.1 | lib/dry/types/primitive_inferrer.rb |
dry-types-1.8.0 | lib/dry/types/primitive_inferrer.rb |