hildjj / node-cbor

Encode and decode CBOR documents, with both easy mode, streaming mode, and SAX-style evented mode.
MIT License
356 stars 73 forks source link

cbor-diag #168

Closed CodeOn-ArK closed 2 years ago

CodeOn-ArK commented 2 years ago

Hi does it supports cbor-diag? context : https://github.com/cbor/cbor.github.io/issues/89

hildjj commented 2 years ago

Yes. From the API:

await cbor.diagnose(cbor.encode(Buffer.from('foo')))
// "h'666f6f'\n"

From the CLI:

> cbor2diag -x 43666f6f
h'666f6f'
CodeOn-ArK commented 2 years ago

Hi It would be very helpful if you can show the way to encode this using APIs:

{
"val1" : "p",
"val2" : h'1234abcd'
}

Also can you guide to some examples Regards

CodeOn-ArK commented 2 years ago

Anyway how to use this line of code

await cbor.diagnose(cbor.encode(Buffer.from('foo')))

suppose I want to send some binary data instead of foo how to achieve that.

hildjj commented 2 years ago

There are lots of examples in the tests, e.g. https://github.com/hildjj/node-cbor/blob/main/packages/cbor/test/diagnose.ava.js

Here is a more full-featured example for your data above:

const cbor = require('cbor');
const input = {
  val1: "p",
  val2: Buffer.from("1234abcd", "hex") // Put any binary data in a Buffer or Uint8Array
}
const encoded = cbor.encode(input); // `encoded` is now a Buffer containing the binary CBOR-encoded version of `input`
console.log(encoded.toString('hex')); // a26476616c3161706476616c32441234abcd
cbor.diagnose(encoded).then(result => {
  // `diagnose` returns a Promise.  If you're in an async function, you can
  // use `await` instead of the `then` syntax.

  // `result` is now a string that
  // contains the diag formatted version of `input`
  console.log(result); // {"val1": "p", "val2": h'1234abcd'}
});

Documentation for the diagnose function is here.

CodeOn-ArK commented 2 years ago

Thanks a lot for saving the day!!