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