Basic model and env parser
This commit is contained in:
parent
2eec68dcdf
commit
82b4eabca7
2 changed files with 70 additions and 0 deletions
45
src/env.zig
Normal file
45
src/env.zig
Normal 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
25
src/notes/model.zig
Normal 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));
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue