Module: Takagi::Serialization

Defined in:
lib/takagi/serialization.rb,
lib/takagi/serialization/base.rb,
lib/takagi/serialization/registry.rb,
lib/takagi/serialization/cbor_serializer.rb,
lib/takagi/serialization/json_serializer.rb,
lib/takagi/serialization/text_serializer.rb,
lib/takagi/serialization/octet_stream_serializer.rb,
sig/takagi/serialization.rbs

Overview

Content-format serialization system

Provides pluggable serialization/deserialization for CoAP content-formats. Built-in serializers for common formats:

  • JSON (application/json, code 50)
  • CBOR (application/cbor, code 60)
  • Text (text/plain, code 0)
  • Binary (application/octet-stream, code 42)

Examples:

Encoding data

Takagi::Serialization::Registry.encode({ temp: 25 }, 50)  # JSON
Takagi::Serialization::Registry.encode({ temp: 25 }, 60)  # CBOR

Decoding data

Takagi::Serialization::Registry.decode(bytes, 50)  # JSON
Takagi::Serialization::Registry.decode(bytes, 60)  # CBOR

Registering custom serializer

class XmlSerializer < Takagi::Serialization::Base
  def encode(data)
    # XML encoding logic
  end

  def decode(bytes)
    # XML decoding logic
  end

  def content_type
    'application/xml'
  end

  def content_format_code
    41
  end
end

Takagi::Serialization::Registry.register(41, XmlSerializer)

Checking supported formats

Takagi::Serialization::Registry.supports?(50)  # => true
Takagi::Serialization::Registry.supported_formats  # => [0, 42, 50, 60]
puts Takagi::Serialization::Registry.summary

Defined Under Namespace

Classes: Base, CborSerializer, DecodeError, EncodeError, Error, InvalidSerializerError, JsonSerializer, OctetStreamSerializer, Registry, TextSerializer, UnknownFormatError

Class Method Summary collapse

Class Method Details

.decode(bytes, format) ⇒ Object

Decode bytes with format

Parameters:

  • bytes (String)
  • format (Integer)

Returns:

  • (Object)


99
100
101
# File 'lib/takagi/serialization.rb', line 99

def self.decode(bytes, format)
  Registry.decode(bytes, format)
end

.encode(data, format) ⇒ String

Encode data with format

Parameters:

  • data (Object)
  • format (Integer)

Returns:

  • (String)


87
88
89
# File 'lib/takagi/serialization.rb', line 87

def self.encode(data, format)
  Registry.encode(data, format)
end

.register_defaults!void

This method returns an undefined value.

Register default serializers



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/takagi/serialization.rb', line 55

def self.register_defaults!
  Registry.register(
    CoAP::Registries::ContentFormat::TEXT_PLAIN,
    TextSerializer
  )

  Registry.register(
    CoAP::Registries::ContentFormat::OCTET_STREAM,
    OctetStreamSerializer
  )

  Registry.register(
    CoAP::Registries::ContentFormat::JSON,
    JsonSerializer
  )

  Registry.register(
    CoAP::Registries::ContentFormat::CBOR,
    CborSerializer
  )

  Takagi.logger.debug 'Registered default serializers: text/plain, octet-stream, JSON, CBOR'
end

.supports?(format) ⇒ Boolean

Check if format is supported

Parameters:

  • format (Integer)

Returns:

  • (Boolean)


110
111
112
# File 'lib/takagi/serialization.rb', line 110

def self.supports?(format)
  Registry.supports?(format)
end