1. 09 Jun, 2021 1 commit
    • Daniel Martí's avatar
      node/bindnode: rethink and better document APIs · 2fc002c2
      Daniel Martí authored
      Before, we envisioned exposing the following APIs:
      
      	Prototype
      	PrototypeNoSchema
      	PrototypeOnlySchema
      	Wrap
      	WrapNoSchema
      
      The names were long, though, and perhaps a bit confusing too. Instead,
      just expose Prototype and Wrap, and allow either of the parameters to be
      nil to infer its value. This makes the API easier to navigate, and we
      can concentrate documentation in fewer places.
      
      Now there's two main entrypoints: Prototype if one wants a high-level
      prototype to create nodes of a certain shape, and Wrap if one wants to
      expose an existing Go value as an IPLD node. Whether one supplies only
      an IPLD Schema, only a Go type/value, or both, is their choice. The only
      exception is Wrap, which always requires a Go value by definition.
      
      Wrap works now, too, and gains an example. It's the same idea as the
      previous Prototype example, but it builds the value via a Go composite
      literal rather than fluent/qp on the IPLD side.
      
      Another noteworthy change is that we now return TypedPrototype and
      TypedNode rather than the regular NodePrototype and Node interfaces,
      since bindnode always works with a schema - even when it's inferred.
      The big advantage here is that one can call the Representation method
      directly on the result without having to type assert, like the example
      does.
      2fc002c2
  2. 03 Jun, 2021 1 commit
    • Daniel Martí's avatar
      node/bindnode: start running all schema tests · 6042d4d8
      Daniel Martí authored
      We add node/tests.SchemaTestAll to simplify this task, meaning we don't
      need to duplicate all test func declarations in node/bindnode.
      SchemaTestAll is also flexible enough to allow running multiple
      sub-tests per schema test in the future.
      
      There were two remaining places in node/tests that still weren't using
      ipld.DeepEqual, so fix those.
      
      Finally, bindnode needed a couple of changes to fully support
      ipld.DeepEqual. Most notable is iteration over maps, which required a
      bit of a refactor to keep ordered keys.
      6042d4d8