-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com>
// SPDX-License-Identifier: AGPL-3.0-only
const std = @import("std");
const ping_request = @import("./proto/yamori/meta/v1/ping_request.proto.zig");
const ping_response = @import("./proto/yamori/meta/v1/ping_response.proto.zig");
const Core = @This();
allocator: std.mem.Allocator,
pub const HandleError = error{
UnknownService,
UnknownMethod,
DecodeError,
EncodeError,
};
pub fn init(allocator: std.mem.Allocator) Core {
var core: Core = undefined;
core.populate(allocator);
return core;
}
pub fn populate(core: *Core, allocator: std.mem.Allocator) void {
core.allocator = allocator;
}
pub fn handle(
self: *const Core,
service: []const u8,
method: []const u8,
bytes: []const u8,
) HandleError![]const u8 {
var arena = std.heap.ArenaAllocator.init(self.allocator);
defer arena.deinit();
const allocator = arena.allocator();
if (std.mem.eql(u8, service, "yamori.meta.v1")) {
if (std.mem.eql(u8, method, "Ping")) {
_ = ping_request.PingRequestReader.init(allocator, bytes) catch {
return HandleError.DecodeError;
};
return ping_response.PingResponse.encode(&.{}, self.allocator) catch {
return HandleError.EncodeError;
};
}
return HandleError.UnknownMethod;
}
return HandleError.UnknownService;
}