You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							119 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							119 lines
						
					
					
						
							2.3 KiB
						
					
					
				
								package schema
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
							 | 
						|
									"github.com/stretchr/testify/assert"
							 | 
						|
									"testing"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func TestStructToSchema(t *testing.T) {
							 | 
						|
									type args struct {
							 | 
						|
										instance any
							 | 
						|
									}
							 | 
						|
									tests := []struct {
							 | 
						|
										name string
							 | 
						|
										args args
							 | 
						|
										want *schema_pb.RecordType
							 | 
						|
									}{
							 | 
						|
										{
							 | 
						|
											name: "scalar type",
							 | 
						|
											args: args{
							 | 
						|
												instance: 1,
							 | 
						|
											},
							 | 
						|
											want: nil,
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name: "simple struct type",
							 | 
						|
											args: args{
							 | 
						|
												instance: struct {
							 | 
						|
													Field1 int
							 | 
						|
													Field2 string
							 | 
						|
												}{},
							 | 
						|
											},
							 | 
						|
											want: RecordTypeBegin().
							 | 
						|
												WithField("Field1", TypeInt32).
							 | 
						|
												WithField("Field2", TypeString).
							 | 
						|
												RecordTypeEnd(),
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name: "simple list",
							 | 
						|
											args: args{
							 | 
						|
												instance: struct {
							 | 
						|
													Field1 []int
							 | 
						|
													Field2 string
							 | 
						|
												}{},
							 | 
						|
											},
							 | 
						|
											want: RecordTypeBegin().
							 | 
						|
												WithField("Field1", ListOf(TypeInt32)).
							 | 
						|
												WithField("Field2", TypeString).
							 | 
						|
												RecordTypeEnd(),
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name: "simple []byte",
							 | 
						|
											args: args{
							 | 
						|
												instance: struct {
							 | 
						|
													Field2 []byte
							 | 
						|
												}{},
							 | 
						|
											},
							 | 
						|
											want: RecordTypeBegin().
							 | 
						|
												WithField("Field2", TypeBytes).
							 | 
						|
												RecordTypeEnd(),
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name: "nested simpe structs",
							 | 
						|
											args: args{
							 | 
						|
												instance: struct {
							 | 
						|
													Field1 int
							 | 
						|
													Field2 struct {
							 | 
						|
														Field3 string
							 | 
						|
														Field4 int
							 | 
						|
													}
							 | 
						|
												}{},
							 | 
						|
											},
							 | 
						|
											want: RecordTypeBegin().
							 | 
						|
												WithField("Field1", TypeInt32).
							 | 
						|
												WithRecordField("Field2",
							 | 
						|
													RecordTypeBegin().
							 | 
						|
														WithField("Field3", TypeString).
							 | 
						|
														WithField("Field4", TypeInt32).
							 | 
						|
														RecordTypeEnd(),
							 | 
						|
												).
							 | 
						|
												RecordTypeEnd(),
							 | 
						|
										},
							 | 
						|
										{
							 | 
						|
											name: "nested struct type",
							 | 
						|
											args: args{
							 | 
						|
												instance: struct {
							 | 
						|
													Field1 int
							 | 
						|
													Field2 struct {
							 | 
						|
														Field3 string
							 | 
						|
														Field4 []int
							 | 
						|
														Field5 struct {
							 | 
						|
															Field6 string
							 | 
						|
															Field7 []byte
							 | 
						|
														}
							 | 
						|
													}
							 | 
						|
												}{},
							 | 
						|
											},
							 | 
						|
											want: RecordTypeBegin().
							 | 
						|
												WithField("Field1", TypeInt32).
							 | 
						|
												WithRecordField("Field2", RecordTypeBegin().
							 | 
						|
													WithField("Field3", TypeString).
							 | 
						|
													WithField("Field4", ListOf(TypeInt32)).
							 | 
						|
													WithRecordField("Field5",
							 | 
						|
														RecordTypeBegin().
							 | 
						|
															WithField("Field6", TypeString).
							 | 
						|
															WithField("Field7", TypeBytes).
							 | 
						|
															RecordTypeEnd(),
							 | 
						|
													).RecordTypeEnd(),
							 | 
						|
												).
							 | 
						|
												RecordTypeEnd(),
							 | 
						|
										},
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									for _, tt := range tests {
							 | 
						|
										t.Run(tt.name, func(t *testing.T) {
							 | 
						|
											assert.Equalf(t, tt.want, StructToSchema(tt.args.instance), "StructToSchema(%v)", tt.args.instance)
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
								}
							 |