This repository has been archived on 2025-03-27. You can view files and clone it, but cannot push or open issues or pull requests.
szun-old/README.md

4.4 KiB

Suzu Runtime / Notation

Szun is a library for defining, manipulating, and formatting structured, dynamically-typed data.

Documentation

Conventions

Namespacing

Examples in this documentation will assume inclusion of the szun namespace. Practical examples should use szun:: or use szun::{...}; in limited scopes.

Type Building

Type building functions are used to generate identifiers used in the construction of complex data types.

  • varying()
  • boolean()
  • natural()
  • integer()
  • block(size)
  • sequence()
  • array(size, type)
  • list(type)
  • schema()
  • record(schema)

Example

This example produces an identifier representing block of 4 bytes, which can be used to construct a list containing that type.

let type_id = block(4);
let list = List::new(type_id);

Global Functions

acquire(type) -> Reference

Allocate a new instance of the provided type.

let refer = acquire(list(integer()));

release(refer:Reference)

Destruct and deallocate a type.

release(refer);

Warning: To avoid access violations, release() should not be used with interface objects, such as Boolean.


encode(refer:Reference) -> vec<u8>

Not implemented


decode(data:Vec<u8>) -> Reference

Not implemented


Language Compiler

Not implemented

Common Methods

new() -> Self

let value = Integer::new();

from(refer:Reference) -> Result<Self,()>

match Integer::from(list.at(0)) {
    Ok(int) => { println!("Integer: {}", int.get()); }
    Err(_) => { println!("Not Integer"); }
}

with(value) -> Self

let b = Boolean::with(true);

*Dereference -> Reference

let refer = *Integer::new();

Varying

Stores a value of any other type.

is_null() -> bool


get() -> Reference

let var = Varying::with(*Boolean::with(true));
let value = Boolean::from(var.get()).unwrap();

set(refer:Reference)

let var = Varying::new();
var.set(*Sequence::with("Hello!"));

Boolean

Stores the value true or false.

get() -> bool

let value = Boolean::with(true);
if value.get() {
    println!("True");
}

set(value:bool)

let mut value = Boolean::new();
value.set(true);

Natural

Stores a non-negative integer value.

get() -> u64

let value = Integer::with(-1);
println!("{}", value.get());

set(value:u64)

let mut value = Integer::new();
value.set(-273);

Integer

Stores a signed integer value.

get() -> i64

let value = Integer::with(-1);
println!("{}", value.get());

set(value:i64)

let mut value = Integer::new();
value.set(-273);

Block

Constant-sized series of bytes.

new(size:usize) -> Block


length() -> usize


get() -> Vec<u8>


set(data:Vec<u8>)


Sequence

Variable-sized series of bytes.

length() -> usize


get() -> String


get_raw() -> Vec<u8>


set(data:&str)


set_raw(data:Vec<u8>)


Array

Constant-sized, ordered collection of items.

new(size:usize, type_id:usize) -> Array


length() -> usize


at(index:usize) -> Reference


set(index:usize, refer:Reference)


List

Variable-sized, ordered collection of items.

new(type_id:usize) -> List


length() -> usize


capacity() -> usize


at(index:usize) -> Reference


set(index:usize, refer:Reference)


insert(index:usize, refer:Reference)


remove(index:usize)


reserve(capacity:usize)


clear()


Schema

Definition of an abstract structure composed of named items.

get(index:usize) -> usize


add(type_id:usize) -> usize


remove(index:usize)


assign(key:&str, type_id:usize) -> usize


map(key:&str, index:usize)


unmap(key:&str)


clear()


bind(id:usize)


Record

Instance of a schema.

new(schema_id:usize) -> Record


at(index:usize) -> Reference


set(index:usize, source:Reference)


keyof(index:usize) -> String


indexof(key:&str) -> usize