2
0

command.zig 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. const value = kvIterator.next() orelse {
  13. std.debug.print("No value found for key: {s}\n", .{key});
  14. return null;
  15. };
  16. return [2][]const u8{ key, value };
  17. }
  18. pub fn parse(msg: []const u8) ?[]const u8 {
  19. const trimSet = [_]u8{ '\n', ' ' };
  20. const cleanMsg = std.mem.trim(u8, msg, &trimSet);
  21. var messageIterator = std.mem.splitAny(u8, cleanMsg, " ");
  22. const cmdString = messageIterator.first();
  23. const command = std.meta.stringToEnum(Command, cmdString) orelse {
  24. std.debug.print("Failed to parse command\n", .{});
  25. return null;
  26. };
  27. switch (command) {
  28. .read => {
  29. const key = messageIterator.next() orelse {
  30. std.debug.print("No key provided for read command\n", .{});
  31. return null;
  32. };
  33. const value = storage.read(key) orelse {
  34. std.debug.print("Key not found in storage: {s}\n", .{key});
  35. return "false";
  36. };
  37. return value;
  38. },
  39. .write => {
  40. const kvPair = messageIterator.next() orelse {
  41. std.debug.print("No key-value pair provided for read command\n", .{});
  42. return null;
  43. };
  44. const kv = parseKeyValue(kvPair) orelse {
  45. std.debug.print("Failed to parse key-value pair\n", .{});
  46. return null;
  47. };
  48. if (storage.write(kv[0], kv[1])) {
  49. return "true";
  50. }
  51. std.debug.print("Failed to write to storage\n", .{});
  52. return "false";
  53. },
  54. .delete => {
  55. std.debug.print("Delete command received\n", .{});
  56. return null;
  57. },
  58. .status => {
  59. std.debug.print("Status command received\n", .{});
  60. return "well going our operation";
  61. },
  62. }
  63. return null;
  64. }