Basic model and env parser

This commit is contained in:
Alex Selimov 2026-06-02 22:35:51 -04:00
parent 2eec68dcdf
commit 82b4eabca7
2 changed files with 70 additions and 0 deletions

45
src/env.zig Normal file
View file

@ -0,0 +1,45 @@
const std = @import("std");
pub const Env = struct {
data_dir: []const u8,
pub fn init(allocator: std.mem.Allocator, env_map: *const std.process.Environ.Map) !Env {
const data_dir = if (env_map.get("XDG_DATA_HOME")) |xdg_data_home|
try std.fmt.allocPrint(allocator, "{s}/zos", .{xdg_data_home})
else blk: {
const home = env_map.get("HOME").?;
break :blk try std.fmt.allocPrint(
allocator,
"{s}/.local/share/zos",
.{home},
);
};
return .{ .data_dir = data_dir };
}
pub fn deinit(env: Env, allocator: std.mem.Allocator) void {
allocator.free(env.data_dir);
}
};
test "Validate that missing xdg data dir is default" {
const allocator = std.testing.allocator;
var env_map = std.process.Environ.Map.init(allocator);
defer env_map.deinit();
try env_map.put("HOME", "/home/aselimov");
const env: Env = try .init(allocator, &env_map);
defer env.deinit(allocator);
std.debug.print("{s}", .{env.data_dir});
try std.testing.expect(std.mem.eql(u8, env.data_dir, "/home/aselimov/.local/share/zos"));
}
test "Validate that xdg data dir sets data dir" {
const allocator = std.testing.allocator;
var env_map = std.process.Environ.Map.init(allocator);
try env_map.put("XDG_DATA_HOME", "/home/aselimov/share");
defer env_map.deinit();
const env: Env = try .init(allocator, &env_map);
defer env.deinit(allocator);
try std.testing.expect(std.mem.eql(u8, env.data_dir, "/home/aselimov/share/zos"));
}

25
src/notes/model.zig Normal file
View file

@ -0,0 +1,25 @@
const std = @import("std");
const Note = @This();
name: []const u8,
tags: []const []const u8,
path: []const u8,
pub fn init() Note {
return .{ .name = "", .tags = .empty, .path = "" };
}
test "Parse from json" {
const allocator = std.testing.allocator;
const json_string = "{\"name\": \"test\", \"tags\":[\"tag1\", \"tag2\"], \"path\":\"/path/to/test\"}";
const result = try std.json.parseFromSlice(Note, allocator, json_string, .{});
defer result.deinit();
const expect = std.testing.expect;
try expect(std.mem.eql(u8, "test", result.value.name));
try expect(std.mem.eql(u8, "tag1", result.value.tags[0]));
try expect(std.mem.eql(u8, "tag2", result.value.tags[1]));
try expect(std.mem.eql(u8, "/path/to/test", result.value.path));
}