@rustresult/json
TypeScript icon, indicating that this package has built-in type declarations

0.6.0 • Public • Published

@rustresult/json

This package provides a simple JSON (de)serialization support for @rustresult/result.

Table Of Contents

Installation

> npm install @rustresult/json
> pnpm install @rustresult/json
> yarn add @rustresult/json

Usage

You can always write your (de)serialization implementation for your use cases. But before you write it, you can check following functions to see if they can help you.

import { ResultJSON } from '@rustresult/json';

// serialization
ResultJSON.serialize(Ok(1)) // { type: 'ok', value: 1 }
ResultJSON.serialize(Err('Some error message')) // { type: 'err', value: 'Some error message' }
ResultJSON.serialize(Ok(Ok(2))) // { type: 'ok', value: { type: 'ok', value: 2 } }

// deserialization
ResultJSON.deserialize({ type: 'ok', value: 1 }) // Ok(1)
ResultJSON.deserialize({ type: 'err', value: 'Some error message' }) // Err('Some error message')
ResultJSON.deserialize({ type: 'ok', value: { type: 'ok', value: 2 } }) // Ok({ type: 'ok', value: 2 }) *the nested `Result` won't be deserialized*

This simple implementation only covers a few use cases. It may not be suitable if:

  • the Result has a nested Result
  • the Result is in a complex structure
  • the Result contains a complex object, such as a class instance, requiring custom (de)serialization

JSON Representation Format

The format of the JSON object follows the adjacently tagged enum representation in Rust library Serde. The reason it doesn't follow the externally tagged enum representation (the default in Serde) is that, the externally tagged representation of Ok(undefined) and Err(undefined) are both {}, therefore we can't tell whether {} should be deserialized to Ok(undefined) or Err(undefined).

Community (De)Serialization Solutions

There're some great JSON (de)serialization libraries for complex objects:

Readme

Keywords

none

Package Sidebar

Install

npm i @rustresult/json

Weekly Downloads

121

Version

0.6.0

License

MIT

Unpacked Size

15.8 kB

Total Files

9

Last publish

Collaborators

  • yf1999