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

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, InvalidSerializerError, JsonSerializer, OctetStreamSerializer, Registry, TextSerializer, UnknownFormatError

Class Method Summary collapse

Class Method Details

.decode(bytes, format) ⇒ Object

Convenience method: Decode bytes with format

Examples:

Serialization.decode(bytes, 50)  # JSON

Parameters:

  • bytes (String)

    Bytes to decode

  • format (Integer)

    Content-format code

Returns:

  • (Object)

    Decoded data



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

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

.encode(data, format) ⇒ String

Convenience method: Encode data with format

Examples:

Serialization.encode({ temp: 25 }, 50)  # JSON

Parameters:

  • data (Object)

    Data to encode

  • format (Integer)

    Content-format code

Returns:

  • (String)

    Encoded bytes



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

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

.register_defaults!Object

Auto-register built-in serializers on module load



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

Examples:

Serialization.supports?(50)  # => true

Parameters:

  • format (Integer)

    Content-format code

Returns:

  • (Boolean)


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

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