diff --git a/README.md b/README.md
index 6e8fd79..8014444 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
-
+
@@ -59,6 +59,88 @@ yarn add pbf-ts
deno install pbf-ts
```
+### Typescript Examples
+
+```ts
+import { readFileSync } from 'fs';
+import { Pbf } from 'pbf-ts';
+
+// Reading:
+const pbf = new Pbf(readFileSync(path));
+
+// Writing:
+const pbf = new Pbf();
+pbf.writeVarintField(1, 1);
+// ...
+const result = pbf.commit();
+```
+
+More complex example:
+
+```ts
+/** Building a class to test with. */
+class Test {
+ a = 0;
+ b = 0;
+ c = 0;
+ /**
+ * @param pbf - the Protobuf object to read from
+ * @param end - the position to stop at
+ */
+ constructor(pbf: Protobuf, end = 0) {
+ pbf.readFields(Test.read, this, end);
+ }
+ /**
+ * @param t - the test object to write.
+ * @param pbf - the Protobuf object to write to.
+ */
+ static writeMessage(t: Test, pbf: Protobuf): void {
+ pbf.writeVarintField(1, t.a);
+ pbf.writeFloatField(2, t.b);
+ pbf.writeSVarintField(3, t.c);
+ }
+
+ /**
+ * @param tag - the tag to read.
+ * @param test - the test to modify
+ * @param pbf - the Protobuf object to read from
+ */
+ static read(tag: number, test: Test, pbf: Protobuf): void {
+ if (tag === 1) test.a = pbf.readVarint();
+ else if (tag === 2) test.b = pbf.readFloat();
+ else if (tag === 3) test.c = pbf.readSVarint();
+ else throw new Error(`Unexpected tag: ${tag}`);
+ }
+
+ /**
+ * @returns - a new test object
+ */
+ static newTest(): Test {
+ return { a: 1, b: 2.2, c: -3 } as Test;
+ }
+
+ /**
+ * @returns - a new default test object
+ */
+ static newTestDefault(): Test {
+ return { a: 0, b: 0, c: 0 } as Test;
+ }
+}
+
+// Writing the message
+const pbf = new Protobuf();
+const t = Test.newTest();
+pbf.writeMessage(5, Test.writeMessage, t);
+const data = pbf.commit();
+expect(data).toEqual(new Uint8Array([42, 9, 8, 1, 21, 205, 204, 12, 64, 24, 5]));
+
+// Reading the message
+const pbf2 = new Protobuf(data);
+expect(pbf2.readTag()).toEqual({ tag: 5, type: Protobuf.Bytes });
+const t2 = new Test(pbf2, pbf2.readVarint() + pbf2.pos);
+expect(t2).toEqual({ a: 1, b: 2.200000047683716, c: -3 } as Test);
+```
+
### Rust
Install the package:
@@ -75,7 +157,7 @@ or add the following to your `Cargo.toml`:
pbf = "0.3"
```
-## Examples
+### Rust Examples
```rust
use pbf::{ProtoRead, ProtoWrite, Protobuf, Field, Type};