Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,282 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Getty


Getty


Version Zig Build status Discord License


Getty is a framework for building robust, optimal, and reusable (de)serializers in Zig.

  • Compile-time (de)serialization.
  • Out-of-the-box support for a variety of std types.
  • Granular customization for existing and remote types.
  • Data models that serve as simple and generic baselines for (de)serializers.

Quick Start

build.zig
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    const opts = .{ .target = target, .optimize = optimize };
    const json_mod = b.dependency("json", opts).module("json");

    const exe = b.addExecutable(.{
        .name = "quick-start",
        .root_source_file = .{ .path = "src/main.zig" },
        .target = target,
        .optimize = optimize,
    });

    exe.addModule("json", json_mod);

    const run_cmd = b.addRunArtifact(exe);
    const run_step = b.step("run", "Run the app");
    run_step.dependOn(&run_cmd.step);
}
build.zig.zon
.{
    .name = "quick-start",
    .version = "0.1.0",
    .paths = .{""},
    .dependencies = .{
        .json = .{
            .url = "https://github.com/getty-zig/json/archive/3e3cf7b.tar.gz",
            .hash = "122017ccb426b5f5690fdda438134852e940796b0ac619eb2648782a7879146f4fcd",
        },
    },
}
src/main.zig
const std = @import("std");
const json = @import("json");

const ally = std.heap.page_allocator;

const Point = struct {
    x: i32,
    y: i32,
};

pub fn main() !void {
    const value = Point{ .x = 1, .y = 2 };

    // Serialize a Point value into JSON.
    const serialized = try json.toSlice(ally, value);
    defer ally.free(serialized);

    // Deserialize JSON data into a Point value.
    const deserialized = try json.fromSlice(ally, Point, serialized);

    // Print results.
    std.debug.print("{s}\n", .{serialized});  // {"x":1,"y":2}
    std.debug.print("{}\n", .{deserialized}); // main.Point{ .x = 1, .y = 2 }
}

Installation

  1. Declare Getty as a project dependency with zig fetch:

    zig fetch --save git+https://github.com/getty-zig/getty.git#<COMMIT>
  2. Expose Getty as a module in your project's build.zig:

    pub fn build(b: *std.Build) void {
        const target = b.standardTargetOptions(.{});
        const optimize = b.standardOptimizeOption(.{});
    
        const opts = .{ .target = target, .optimize = optimize };      // 👈
        const getty_mod = b.dependency("getty", opts).module("getty"); // 👈
    
        const exe = b.addExecutable(.{
            .name = "my-project",
            .root_source_file = .{ .path = "src/main.zig" },
            .target = target,
            .optimize = optimize,
        });
        exe.root_module.addImport("getty", getty_mod); // 👈
    
        // ...
    }
  3. Import Getty into your code:

    const getty = @import("getty");

Resources

About

A (de)serialization framework for Zig

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages