Compare commits
	
		
			2 commits
		
	
	
		
			0a5a08a7ed
			...
			17f115d9c6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 17f115d9c6 | |||
| 
							 | 
						0b2d6e6a1b | 
					 2 changed files with 15 additions and 11 deletions
				
			
		| 
						 | 
					@ -30,9 +30,9 @@ pub fn build(b: *std.Build) void {
 | 
				
			||||||
    b.installArtifact(lib);
 | 
					    b.installArtifact(lib);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const module = b.addModule("smithy", .{
 | 
					    const module = b.addModule("smithy", .{
 | 
				
			||||||
        .source_file = .{ .path = "src/smithy.zig" },
 | 
					        .root_source_file = .{ .path = "src/smithy.zig" },
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    lib.addModule("smithy", module);
 | 
					    lib.root_module.addImport("smithy", module);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Creates a step for unit testing. This only builds the test executable
 | 
					    // Creates a step for unit testing. This only builds the test executable
 | 
				
			||||||
    // but does not run it.
 | 
					    // but does not run it.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,14 +7,16 @@ pub const Smithy = struct {
 | 
				
			||||||
    metadata: ModelMetadata,
 | 
					    metadata: ModelMetadata,
 | 
				
			||||||
    shapes: []ShapeInfo,
 | 
					    shapes: []ShapeInfo,
 | 
				
			||||||
    allocator: std.mem.Allocator,
 | 
					    allocator: std.mem.Allocator,
 | 
				
			||||||
 | 
					    json_source: std.json.Parsed(std.json.Value),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const Self = @This();
 | 
					    const Self = @This();
 | 
				
			||||||
    pub fn init(allocator: std.mem.Allocator, version: []const u8, metadata: ModelMetadata, shapeinfo: []ShapeInfo) Smithy {
 | 
					    pub fn init(allocator: std.mem.Allocator, version: []const u8, metadata: ModelMetadata, shapeinfo: []ShapeInfo, json_source: std.json.Parsed(std.json.Value)) Smithy {
 | 
				
			||||||
        return .{
 | 
					        return .{
 | 
				
			||||||
            .version = version,
 | 
					            .version = version,
 | 
				
			||||||
            .metadata = metadata,
 | 
					            .metadata = metadata,
 | 
				
			||||||
            .shapes = shapeinfo,
 | 
					            .shapes = shapeinfo,
 | 
				
			||||||
            .allocator = allocator,
 | 
					            .allocator = allocator,
 | 
				
			||||||
 | 
					            .json_source = json_source,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    pub fn deinit(self: Self) void {
 | 
					    pub fn deinit(self: Self) void {
 | 
				
			||||||
| 
						 | 
					@ -76,6 +78,7 @@ pub const Smithy = struct {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        self.allocator.free(self.shapes);
 | 
					        self.allocator.free(self.shapes);
 | 
				
			||||||
 | 
					        self.json_source.deinit();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
pub const ShapeInfo = struct {
 | 
					pub const ShapeInfo = struct {
 | 
				
			||||||
| 
						 | 
					@ -99,13 +102,13 @@ pub const TraitType = enum {
 | 
				
			||||||
    aws_auth_sigv4,
 | 
					    aws_auth_sigv4,
 | 
				
			||||||
    aws_protocol,
 | 
					    aws_protocol,
 | 
				
			||||||
    ec2_query_name,
 | 
					    ec2_query_name,
 | 
				
			||||||
 | 
					    json_name,
 | 
				
			||||||
 | 
					    xml_name,
 | 
				
			||||||
    http,
 | 
					    http,
 | 
				
			||||||
    http_header,
 | 
					    http_header,
 | 
				
			||||||
    http_label,
 | 
					    http_label,
 | 
				
			||||||
    http_query,
 | 
					    http_query,
 | 
				
			||||||
    http_payload,
 | 
					    http_payload,
 | 
				
			||||||
    json_name,
 | 
					 | 
				
			||||||
    xml_name,
 | 
					 | 
				
			||||||
    required,
 | 
					    required,
 | 
				
			||||||
    documentation,
 | 
					    documentation,
 | 
				
			||||||
    pattern,
 | 
					    pattern,
 | 
				
			||||||
| 
						 | 
					@ -253,10 +256,10 @@ pub const AwsProtocol = enum {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn parse(allocator: std.mem.Allocator, json_model: []const u8) !Smithy {
 | 
					pub fn parse(allocator: std.mem.Allocator, json_model: []const u8) !Smithy {
 | 
				
			||||||
    // construct a parser. We're not copying strings here, but that may
 | 
					    // construct a parser. We're not copying strings here
 | 
				
			||||||
    // be a poor decision
 | 
					    // Instead, we keep the original json string around
 | 
				
			||||||
 | 
					    // This might be bad if we only need a small fraction of the original json source
 | 
				
			||||||
    var vt = try std.json.parseFromSlice(std.json.Value, allocator, json_model, .{});
 | 
					    var vt = try std.json.parseFromSlice(std.json.Value, allocator, json_model, .{});
 | 
				
			||||||
    defer vt.deinit();
 | 
					 | 
				
			||||||
    return Smithy.init(
 | 
					    return Smithy.init(
 | 
				
			||||||
        allocator,
 | 
					        allocator,
 | 
				
			||||||
        vt.value.object.get("smithy").?.string,
 | 
					        vt.value.object.get("smithy").?.string,
 | 
				
			||||||
| 
						 | 
					@ -265,6 +268,7 @@ pub fn parse(allocator: std.mem.Allocator, json_model: []const u8) !Smithy {
 | 
				
			||||||
            .suppressions = &.{},
 | 
					            .suppressions = &.{},
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        try shapes(allocator, vt.value.object.get("shapes").?.object),
 | 
					        try shapes(allocator, vt.value.object.get("shapes").?.object),
 | 
				
			||||||
 | 
					        vt,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -572,7 +576,7 @@ fn getShape(allocator: std.mem.Allocator, shape: std.json.Value) SmithyParseErro
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn parseMembers(allocator: std.mem.Allocator, shape: ?std.json.Value) SmithyParseError![]TypeMember {
 | 
					fn parseMembers(allocator: std.mem.Allocator, shape: ?std.json.Value) SmithyParseError![]TypeMember {
 | 
				
			||||||
    var rc: []TypeMember = &.{};
 | 
					    const rc: []TypeMember = &.{};
 | 
				
			||||||
    if (shape == null)
 | 
					    if (shape == null)
 | 
				
			||||||
        return rc;
 | 
					        return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -606,7 +610,7 @@ fn parseTraitsOnly(allocator: std.mem.Allocator, shape: std.json.Value) SmithyPa
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn parseTraits(allocator: std.mem.Allocator, shape: ?std.json.Value) SmithyParseError![]Trait {
 | 
					fn parseTraits(allocator: std.mem.Allocator, shape: ?std.json.Value) SmithyParseError![]Trait {
 | 
				
			||||||
    var rc: []Trait = &.{};
 | 
					    const rc: []Trait = &.{};
 | 
				
			||||||
    if (shape == null)
 | 
					    if (shape == null)
 | 
				
			||||||
        return rc;
 | 
					        return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -864,7 +868,7 @@ fn read_file_to_string(allocator: std.mem.Allocator, file_name: []const u8, max_
 | 
				
			||||||
    return file.readToEndAlloc(allocator, max_bytes);
 | 
					    return file.readToEndAlloc(allocator, max_bytes);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const test_data: []const u8 = @embedFile("test.json");
 | 
					const test_data: []const u8 = @embedFile("test.json");
 | 
				
			||||||
const intrinsic_type_count: usize = 5; // 5 intrinsic types are added to every model
 | 
					const intrinsic_type_count: usize = 15; // 15 intrinsic types are added to every model (see shapes() function)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test "parse string" {
 | 
					test "parse string" {
 | 
				
			||||||
    const test_string =
 | 
					    const test_string =
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue