Sha256: 99ea9caf305119bffa443052116a8116a11bc687b6baacaf8b13d5df7e0fe116

Contents?: true

Size: 900 Bytes

Versions: 13

Compression:

Stored size: 900 Bytes

Contents

# frozen_string_literal: false
require 'json' unless defined?(::JSON::JSON_LOADED) && ::JSON::JSON_LOADED

require 'dry/monads'

# Inspired by standard library implementation
# for Time serialization/deserialization see (json/lib/json/add/time.rb)
#
module Dry
  module Monads
    class Maybe
      # Deserializes JSON string by using Dry::Monads::Maybe#lift method
      def self.json_create(serialized)
        coerce(serialized.fetch('value'))
      end

      # Returns a hash, that will be turned into a JSON object and represent this
      # object.
      def as_json(*)
        {
          JSON.create_id => self.class.name,
          value: none? ? nil : @value
        }
      end

      # Stores class name (Dry::Monads::Maybe::Some or Dry::Monads::Maybe::None)
      # with the monad value as JSON string
      def to_json(*args)
        as_json.to_json(*args)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
dry-monads-1.3.4 lib/json/add/dry/monads/maybe.rb
dry-monads-1.3.3 lib/json/add/dry/monads/maybe.rb
dry-monads-1.3.2 lib/json/add/dry/monads/maybe.rb
dry-monads-1.3.1 lib/json/add/dry/monads/maybe.rb
dry-monads-1.3.0 lib/json/add/dry/monads/maybe.rb
dry-monads-1.2.0 lib/json/add/dry/monads/maybe.rb
dry-monads-1.1.0 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.1 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.0 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.0.rc1 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.0.beta3 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.0.beta2 lib/json/add/dry/monads/maybe.rb
dry-monads-1.0.0.beta1 lib/json/add/dry/monads/maybe.rb