zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

enum_type_definition.ex (2458B)


      1 defmodule Absinthe.Blueprint.Schema.EnumTypeDefinition do
      2   @moduledoc false
      3 
      4   alias Absinthe.Blueprint
      5 
      6   @enforce_keys [:name]
      7   defstruct [
      8     :name,
      9     :identifier,
     10     :description,
     11     :module,
     12     values: [],
     13     directives: [],
     14     source_location: nil,
     15     # Added by phases,
     16     flags: %{},
     17     errors: [],
     18     __reference__: nil,
     19     __private__: []
     20   ]
     21 
     22   @type t :: %__MODULE__{
     23           name: String.t(),
     24           values: [Blueprint.Schema.EnumValueDefinition.t()],
     25           directives: [Blueprint.Directive.t()],
     26           identifier: atom,
     27           source_location: nil | Blueprint.SourceLocation.t(),
     28           # Added by phases
     29           flags: Blueprint.flags_t(),
     30           errors: [Absinthe.Phase.Error.t()]
     31         }
     32   def build(type_def, _schema) do
     33     %Absinthe.Type.Enum{
     34       identifier: type_def.identifier,
     35       name: type_def.name,
     36       values: values_by(type_def, :identifier),
     37       values_by_internal_value: values_by(type_def, :value),
     38       values_by_name: values_by(type_def, :name),
     39       definition: type_def.module,
     40       description: type_def.description
     41     }
     42   end
     43 
     44   def values_by(type_def, key) do
     45     for value_def <- List.flatten(type_def.values), into: %{} do
     46       case value_def do
     47         %Blueprint.Schema.EnumValueDefinition{} ->
     48           value = %Absinthe.Type.Enum.Value{
     49             name: value_def.name,
     50             value: value_def.value,
     51             enum_identifier: type_def.identifier,
     52             __reference__: value_def.__reference__,
     53             description: value_def.description,
     54             deprecation: value_def.deprecation
     55           }
     56 
     57           {Map.fetch!(value_def, key), value}
     58 
     59         # Values defined via dynamic function calls don't yet get converted
     60         # into proper Blueprints, but it works for now. This will get refactored
     61         # in the future as we build out a general solution for dynamic values.
     62         raw_value ->
     63           name = raw_value |> to_string() |> String.upcase()
     64 
     65           value_def = %{
     66             name: name,
     67             value: raw_value,
     68             identifier: raw_value
     69           }
     70 
     71           value = %Absinthe.Type.Enum.Value{
     72             name: name,
     73             value: raw_value,
     74             enum_identifier: type_def.identifier
     75           }
     76 
     77           {Map.fetch!(value_def, key), value}
     78       end
     79     end
     80   end
     81 
     82   defimpl Inspect do
     83     defdelegate inspect(term, options),
     84       to: Absinthe.Schema.Notation.SDL.Render
     85   end
     86 end