command.zig 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const std = @import("std");
  2. const storage = @import("storage.zig");
  3. const Command = enum {
  4. read,
  5. write,
  6. delete,
  7. status,
  8. };
  9. fn parseKeyValue(buf: []const u8) ?[2][]const u8 {
  10. var kvIterator = std.mem.splitAny(u8, buf, "|");
  11. const key = kvIterator.first();
  12. return [2][]const u8{ key, kvIterator.rest() };
  13. }
  14. pub fn parse(msg: []const u8) ?[]const u8 {
  15. const trimSet = [_]u8{ '\n', ' ' };
  16. const cleanMsg = std.mem.trim(u8, msg, &trimSet);
  17. var messageIterator = std.mem.splitAny(u8, cleanMsg, " ");
  18. const cmdString = messageIterator.first();
  19. const command = std.meta.stringToEnum(Command, cmdString) orelse {
  20. std.debug.print("Failed to parse command\n", .{});
  21. return null;
  22. };
  23. switch (command) {
  24. .read => {
  25. const key = messageIterator.rest();
  26. const value = storage.read(key) orelse {
  27. std.debug.print("Key not found in storage: {s}\n", .{key});
  28. return "false";
  29. };
  30. return value;
  31. },
  32. .write => {
  33. const kvPair = messageIterator.rest();
  34. const kv = parseKeyValue(kvPair) orelse {
  35. std.debug.print("Failed to parse key-value pair\n", .{});
  36. return "false";
  37. };
  38. if (storage.write(kv[0], kv[1])) {
  39. return "true";
  40. }
  41. std.debug.print("Failed to write to storage\n", .{});
  42. return "false";
  43. },
  44. .delete => {
  45. std.debug.print("Delete command received\n", .{});
  46. return "false";
  47. },
  48. .status => {
  49. std.debug.print("Status command received\n", .{});
  50. return "well going our operation";
  51. },
  52. }
  53. return null;
  54. }