feat(README, filledDataView, sizedDataView)
This commit is contained in:
68
README.md
Normal file
68
README.md
Normal file
@ -0,0 +1,68 @@
|
||||
# serialize-js
|
||||
|
||||
```js
|
||||
import * as s from '@sek1ro/serialize'
|
||||
|
||||
const User = s.Struct({
|
||||
id: s.Int(32, 'unsigned'),
|
||||
name: String,
|
||||
age: Number,
|
||||
array: [Array, Boolean],
|
||||
raw_data: DataView,
|
||||
})
|
||||
|
||||
const user = {
|
||||
id: 1,
|
||||
name: 'john',
|
||||
age: 20,
|
||||
array: [true, false],
|
||||
raw_data: s.filledDataView([0x00, 0x00, 0x00, 0xff]),
|
||||
}
|
||||
|
||||
const dv = s.sizedDataView(sizeof(user, User))
|
||||
s.serialize(dv, user, User)
|
||||
|
||||
const user_copy = s.parse(dv, User)
|
||||
```
|
||||
|
||||
## Contents
|
||||
|
||||
- [Types](#types)
|
||||
- [What is headless?](#headless)
|
||||
|
||||
## Types
|
||||
|
||||
### ES types
|
||||
|
||||
- Boolean
|
||||
- Number
|
||||
- String (headless)
|
||||
- Array (headless)
|
||||
- DataView (headless)
|
||||
|
||||
### Built-in types
|
||||
|
||||
- Int(bits: 8 | 16 | 32, sign: 'signed' | 'unsigned')
|
||||
- ConstString(size: number)
|
||||
- ConstArray(size: number)
|
||||
- ConstDataView(byte_size: number)
|
||||
- Struct(type_obj: Record<string, SerializableType | SerializableType[]>)
|
||||
- Sequence(types: (SerializableType | SerializableType[])[])
|
||||
|
||||
## Headless
|
||||
|
||||
If type has variable size in bytes, if sizeof type different for specific object, it's called headless.
|
||||
|
||||
```js
|
||||
const array = [true, false]
|
||||
|
||||
sizeof(ConstArray(2), Boolean) // 2
|
||||
sizeof(array, ConstArray(2), Boolean) // 2
|
||||
|
||||
sizeof(Array, Boolean) // Error: unknown sizeof Array, Boolean
|
||||
|
||||
sizeof(array, Array, Boolean) // 2
|
||||
```
|
||||
|
||||
Library has function `isHeadless(...types: SerializableType[])` to check this.
|
||||
It's used in `Structure`, if type is headless, in head of structure it's stored as uint32 offset to beginning of type's body, if type isn't headless, it's stored directly in head of structure
|
||||
Reference in New Issue
Block a user