https://github.com/plurid/sereal
Real (Values and Objects) Serialization
https://github.com/plurid/sereal
serialization
Last synced: 19 days ago
JSON representation
Real (Values and Objects) Serialization
- Host: GitHub
- URL: https://github.com/plurid/sereal
- Owner: plurid
- License: other
- Created: 2021-04-11T19:43:26.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-04-27T18:03:25.000Z (over 2 years ago)
- Last Synced: 2024-12-28T04:29:38.861Z (11 months ago)
- Topics: serialization
- Language: TypeScript
- Homepage: https://plurid.com/sereal
- Size: 1.31 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
sereal
Real (Values and Objects) Serialization
### Contents
+ [About](#about)
+ [Install](#install)
+ [Usage](#usage)
+ [Packages](#packages)
+ [Codeophon](#codeophon)
## About
`sereal` provides utility for the serialization of regular primitives (such as boolean, number, string), and also for the serialization of objects.
In order for an object to be serialized with `sereal` it must be a `serealable object`, that is, it must implement the interface
``` typescript
interface SerealableObject {
toSereal(): S;
loadSereal(state: S): void;
}
```
The `toSereal()` and `loadSereal()` methods will be used by `Sereal` to serialize and instantiate the serealable object.
## Install
To install run
``` bash
npm install @plurid/sereal
```
or
``` bash
yarn add @plurid/sereal
```
## Usage
``` typescript
import Sereal, {
SerealableObject,
} from '@plurid/sereal';
class SomeSereal implements SerealableObject {
private value = 23;
public increase() {
this.value += 1;
}
public toSereal() {
return {
value: this.value,
};
}
public loadSereal(
state: any,
) {
this.value = state.value;
}
}
const main = () => {
const sereal = new Sereal();
sereal.sign({
SomeSereal: {
object: SomeSereal,
fields: [
'someSereal',
'some.nested.sereal',
],
},
});
const someSereal = new SomeSereal();
const someNestedSereal = new SomeSereal();
sereal.step({
someSereal: someSereal,
some: {
nested: {
sereal: someNestedSereal,
},
},
});
someSereal.increase();
someSereal.increase();
// `extract` contains the serealized value
// {
// someSereal: {
// value: 25,
// },
// some: {
// nested: {
// sereal: {
// value: 23,
// },
// },
// },
// }
const extract = sereal.extract();
const anotherSereal = new Sereal();
anotherSereal.sign({
SomeSereal: {
object: SomeSereal,
fields: [
'someSereal',
'some.nested.sereal',
],
},
});
// `intract` injects the `sereal` `extract` into the `anotherSereal`
anotherSereal.intract(extract);
// `anotherSereal` has the same state as `sereal`
const extractAnotherSereal = anotherSereal.extract();
}
main();
```
## Packages
[@plurid/sereal][sereal] • sereal
[sereal]: https://github.com/plurid/plurid/tree/master/packages/sereal
## [Codeophon](https://github.com/ly3xqhl8g9/codeophon)
+ licensing: [delicense](https://github.com/ly3xqhl8g9/delicense)
+ versioning: [αver](https://github.com/ly3xqhl8g9/alpha-versioning)