UUID.
parent
b0c62f89c8
commit
1ddcd6678f
|
@ -0,0 +1,47 @@
|
|||
require "../cbor"
|
||||
require "uuid"
|
||||
|
||||
struct UUID
|
||||
# Creates UUID from CBOR using `CBOR::Decoder`.
|
||||
#
|
||||
# NOTE: `require "uuid/cbor"` is required to opt-in to this feature.
|
||||
#
|
||||
# ```
|
||||
# require "cbor"
|
||||
# require "uuid"
|
||||
# require "uuid/cbor"
|
||||
#
|
||||
# class Example
|
||||
# include CBOR::Serializable
|
||||
#
|
||||
# property id : UUID
|
||||
# end
|
||||
#
|
||||
# hash = {"id" => "ba714f86-cac6-42c7-8956-bcf5105e1b81"}
|
||||
# example = Example.from_cbor hash.to_cbor
|
||||
# example.id # => UUID(ba714f86-cac6-42c7-8956-bcf5105e1b81)
|
||||
# ```
|
||||
def self.new(pull : CBOR::Decoder)
|
||||
# Either the UUID was encoded as String or bytes (smaller).
|
||||
case pull.current_token
|
||||
when CBOR::Token::StringT
|
||||
new(pull.read_string)
|
||||
when CBOR::Token::BytesT
|
||||
new(pull.read_bytes)
|
||||
else
|
||||
raise "trying to get an UUID, but CBOR value isn't a string nor bytes: #{pull.current_token}"
|
||||
end
|
||||
end
|
||||
|
||||
# Returns UUID as CBOR value.
|
||||
#
|
||||
# NOTE: `require "uuid/cbor"` is required to opt-in to this feature.
|
||||
#
|
||||
# ```
|
||||
# uuid = UUID.new("87b3042b-9b9a-41b7-8b15-a93d3f17025e")
|
||||
# uuid.to_cbor
|
||||
# ```
|
||||
def to_cbor(cbor : CBOR::Encoder)
|
||||
cbor.write(@bytes.to_slice)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue