GreenFairy.Enum (GreenFairy v0.3.0)
View SourceDefines a GraphQL enum type with a clean DSL and Ecto enum mapping support.
Basic Usage
defmodule MyApp.GraphQL.Enums.UserStatus do
use GreenFairy.Enum
enum "UserStatus" do
value :active
value :inactive
value :pending, as: "PENDING_APPROVAL"
end
endEcto Enum Mapping
Map GraphQL enum values to Ecto enum values automatically:
defmodule MyApp.GraphQL.Enums.PostVisibility do
use GreenFairy.Enum
enum "PostVisibility" do
# GraphQL: PUBLIC, Ecto: :public
value :public
# GraphQL: FRIENDS_ONLY, Ecto: :friends
value :friends_only, ecto: :friends
# GraphQL: PRIVATE, Ecto: :private
value :private
end
endCustom Transformations
Provide custom serialize/parse functions for complex mappings:
defmodule MyApp.GraphQL.Enums.Priority do
use GreenFairy.Enum
enum "Priority" do
value :low
value :medium
value :high
end
# Transform GraphQL value to database value
def serialize(:low), do: 1
def serialize(:medium), do: 5
def serialize(:high), do: 10
# Transform database value to GraphQL value
def parse(1), do: :low
def parse(5), do: :medium
def parse(10), do: :high
def parse(_), do: nil
endOptions
:description- Description of the enum type (can also use @desc):ecto(on value) - Map this value to a different Ecto enum value
Summary
Functions
Defines a GraphQL enum type.
Defines the mapping between GraphQL enum values and Ecto/database values.
Controls whether this enum type appears in introspection results.
See GreenFairy.Type.visible/1 for details.
Functions
Defines a GraphQL enum type.
Examples
enum "UserStatus" do
value :active
value :inactive
value :pending, as: "PENDING_APPROVAL"
end
Defines the mapping between GraphQL enum values and Ecto/database values.
Examples
enum "PostVisibility" do
value :public
value :friends_only
value :private
end
# Map GraphQL values to Ecto enum values
enum_mapping %{
public: :public, # Same value
friends_only: :friends, # Different value
private: :private # Same value
}When using this, serialize/1 and parse/1 functions are automatically generated.
Controls whether this enum type appears in introspection results.
See GreenFairy.Type.visible/1 for details.