zf

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

decimal.ex (1236B)


      1 if Code.ensure_loaded?(Decimal) do
      2   defmodule Absinthe.Type.Custom.Decimal do
      3     @moduledoc false
      4 
      5     defdelegate serialize(value), to: Decimal, as: :to_string
      6 
      7     alias Absinthe.Blueprint.Input
      8 
      9     @dialyzer {:no_match, parse: 1}
     10     @spec parse(any) :: {:ok, Decimal.t()} | {:ok, nil} | :error
     11     def parse(%Input.String{value: value}) when is_binary(value) do
     12       case Decimal.parse(value) do
     13         # Decimal V2
     14         {decimal, ""} -> {:ok, decimal}
     15         # Decimal V1
     16         {:ok, decimal} -> {:ok, decimal}
     17         _ -> :error
     18       end
     19     end
     20 
     21     def parse(%Input.Float{value: value}) when is_float(value) do
     22       decimal = Decimal.from_float(value)
     23       if Decimal.nan?(decimal), do: :error, else: {:ok, decimal}
     24     end
     25 
     26     def parse(%Input.Integer{value: value}) when is_integer(value) do
     27       decimal = Decimal.new(value)
     28       if Decimal.nan?(decimal), do: :error, else: {:ok, decimal}
     29     end
     30 
     31     def parse(%Input.Null{}) do
     32       {:ok, nil}
     33     end
     34 
     35     def parse(_) do
     36       :error
     37     end
     38   end
     39 else
     40   defmodule Absinthe.Type.Custom.Decimal do
     41     @moduledoc false
     42 
     43     @spec parse(any) :: :error
     44     def parse(_), do: :error
     45 
     46     @spec serialize(any) :: nil
     47     def serialize(_), do: nil
     48   end
     49 end