51 lines
1.6 KiB
Zig
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),
|
|
};
|
|
}
|
|
};
|