hostapps/src/config.zig
2024-05-14 15:23:31 -05:00

51 lines
1.6 KiB
Zig

const std = @import("std");
pub const ConnectionType = enum {
ssh,
telnet,
};
pub const Config = struct {
name: []const u8,
type: ConnectionType,
comment: []const u8,
address: []const u8,
port: u16,
username: []const u8,
manufacturer: []const u8,
model: []const u8,
part_number: []const u8,
class: []const u8,
const Self = @This();
pub fn read(alloc: std.mem.Allocator, path: []const u8) !Self {
const data = try std.fs.cwd().readFileAlloc(alloc, path, 2048);
const parsed = try std.json.parseFromSlice(Self, alloc, data, .{});
defer parsed.deinit();
return try parsed.value.clone(alloc);
}
pub fn clone(self: Self, alloc: std.mem.Allocator) !Self {
return .{
.name = try alloc.dupe(u8, self.name),
.type = self.type,
.comment = try alloc.dupe(u8, self.comment),
.address = try alloc.dupe(u8, self.address),
// .addresses = addr: {
// var addrs = try alloc.alloc([]const u8, self.addresses.len);
// for (self.addresses, 0..) |a, i| {
// addrs[i] = try alloc.dupe(u8, a);
// }
// break :addr addrs;
// },
.port = self.port,
.username = try alloc.dupe(u8, self.username),
.manufacturer = try alloc.dupe(u8, self.manufacturer),
.model = try alloc.dupe(u8, self.model),
.part_number = try alloc.dupe(u8, self.part_number),
.class = try alloc.dupe(u8, self.class),
};
}
};