| ... | ... | @@ -105,6 +105,7 @@ pub const Builder = struct { |
| 105 | 105 | Bool, |
| 106 | 106 | Int, |
| 107 | 107 | Float, |
| 108 | Enum, |
| 108 | 109 | String, |
| 109 | 110 | List, |
| 110 | 111 | }; |
| ... | ... | @@ -450,6 +451,27 @@ pub const Builder = struct { |
| 450 | 451 | }, |
| 451 | 452 | TypeId.Int => panic("TODO integer options to build script", .{}), |
| 452 | 453 | TypeId.Float => panic("TODO float options to build script", .{}), |
| 454 | TypeId.Enum => switch (entry.value.value) { |
| 455 | UserValue.Flag => { |
| 456 | warn("Expected -D{} to be a string, but received a boolean.\n", .{name}); |
| 457 | self.markInvalidUserInput(); |
| 458 | return null; |
| 459 | }, |
| 460 | UserValue.Scalar => |s| { |
| 461 | if (std.meta.stringToEnum(T, s)) |enum_lit| { |
| 462 | return enum_lit; |
| 463 | } else { |
| 464 | warn("Expected -D{} to be of type {}.\n", .{ name, @typeName(T) }); |
| 465 | self.markInvalidUserInput(); |
| 466 | return null; |
| 467 | } |
| 468 | }, |
| 469 | UserValue.List => { |
| 470 | warn("Expected -D{} to be a string, but received a list.\n", .{name}); |
| 471 | self.markInvalidUserInput(); |
| 472 | return null; |
| 473 | }, |
| 474 | }, |
| 453 | 475 | TypeId.String => switch (entry.value.value) { |
| 454 | 476 | UserValue.Flag => { |
| 455 | 477 | warn("Expected -D{} to be a string, but received a boolean.\n", .{name}); |
| ... | ... | @@ -681,6 +703,7 @@ pub const Builder = struct { |
| 681 | 703 | .Int => .Int, |
| 682 | 704 | .Float => .Float, |
| 683 | 705 | .Bool => .Bool, |
| 706 | .Enum => .Enum, |
| 684 | 707 | else => switch (T) { |
| 685 | 708 | []const u8 => .String, |
| 686 | 709 | []const []const u8 => .List, |
| ... | ... | @@ -698,6 +721,7 @@ pub const Builder = struct { |
| 698 | 721 | .Bool => "bool", |
| 699 | 722 | .Int => "int", |
| 700 | 723 | .Float => "float", |
| 724 | .Enum => "enum", |
| 701 | 725 | .String => "string", |
| 702 | 726 | .List => "list", |
| 703 | 727 | }; |