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) | |
| 		}) | |
| 	} | |
| }
 |