2
0

command.zig 2.0 KB

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