Awesome
<center> <img src="https://user-images.githubusercontent.com/41456914/217338569-05b2fa34-e40e-434b-8f2f-41bf12502277.png" /> </center>Abstract
Notice |
---|
This library has moved over to Snowflake. |
zorm is not your traditional ORM tool. Unlike other ORMs, zorm is designed to provide types for making object-relational mapping within your scripts simple and not reliant on database table paradigms.
In zorm, objects are cast on manually defined fields that can be compared:
Object mapping
const std = @import("std");
// In this example, we'll be mapping our object from JSON.
// For this very specific use case, zorm will handle assuming types to be tight and memory-bound.
const dumb_payload =
\\{
\\ "foo": "hello, world",
\\ "bar": 420
\\}
;
const zorm = @import("zorm");
// Objects are defined as a sort of "factory method." The inner argument is a comptime-known
// anonymous struct literal containing fields.
const Foo = zorm.Object(.{
// (comptime T: type, data: ?FieldMetadata)
// Fields can have a name, description and default value.
zorm.Field(?[]const u8, .{ .name = "foo", .default = undefined }),
zorm.Field(usize, .{ .name = "bar" })
});
pub fn main() !void {
// With an object defined, we can now generate our own from our payload.
// (comptime T: type, data: anytype)
const myFoo: zorm.Object = try zorm.create(Foo, .{ .JsonString = dumb_payload });
// Accessing data is now done through the newly created object.
std.debug.print("{any}\n", .{myFoo.get("foo")});
}
Using datatypes
zorm provides you a set of datatypes. An example of a datatype is Date
:
pub fn main() !void {
// We can build a date from a string, useful for defaults.
const date = try zorm.Date.fromString("2002-07-23", .@"YYYY-MM-DD");
// This is an ISO 8601 format, which zorm will intelligently determine
const payload =
\\{
\\ "date": "1999-12-31"
\\}
;
const NewTable = try zorm.create(
zorm.Object(.{
// Default values must either be undefined or part of the type specified in the field,
// as expected when working with structs.
zorm.Field(?zorm.Date, .{ .name = "date", .default = date })
}),
.{ .JsonString = payload }
);
// 1999 will be returned instead of 2002.
std.debug.print("{?}\n", .{NewTable.get("date").f_type.year});
}
Building
zorm runs on 0.10.0-dev and higher versions of Zig.
It is recommended to install and build from source:
$ git clone --recursive https://github.com/ziglibs/zorm
$ cd ./zorm
$ zig build