Skip to content

have Serializable override inspect? #66

@will

Description

@will

I'm not sure, but would it be a good idea to have it so including Serializable also overwrites inspect(io : IO) to include the properties?

The upside, is as a client instead of getting something like this

server

record Details, name : String, count : Int32 do
    include MessagePack::Serializable
end

def add_thing(id : String, details : Details) : Nil
end

client

c.add_thing  "hi", {name: "will"}
Traceback (most recent call last):
        6: from ./repl:32:in `<main>'
        5: from (irb):2
        4: from (irb):2:in `rescue in irb_binding'
        3: from ./repl:12:in `method_missing'
        2: from /Users/will/.asdf/installs/ruby/2.6.6/lib/ruby/gems/2.6.0/gems/msgpack-rpc-0.6.0/lib/msgpack/rpc/session.rb:54:in `call'
        1: from /Users/will/.asdf/installs/ruby/2.6.6/lib/ruby/gems/2.6.0/gems/msgpack-rpc-0.6.0/lib/msgpack/rpc/future.rb:54:in `get'
MessagePack::RPC::RuntimeError (bad arguments, expected [id : String, details : Details], but got details: HashT[1])

the error could maybe be nicer to better see what you were missing

MessagePack::RPC::RuntimeError (bad arguments, expected [id : String, details : Details[name : String, count : Int32], but got details: HashT[1])

There might be downsides though, but I'm not aware of what they would be, so I wanted to check first if this would be good.

I tried doing a PR to show this, but I can't figure out the macros :( in the macro included section, @type.instance_variables seems to be empty, and I don’t have a ton of experience with macros

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions