github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/gen/golang/gen_test.go (about) 1 package golang 2 3 import ( 4 "log" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/webrpc/webrpc/gen" 9 "github.com/webrpc/webrpc/schema" 10 ) 11 12 const input = ` 13 { 14 "webrpc": "v1", 15 "name": "example", 16 "version":" v0.0.1", 17 "messages": [ 18 { 19 "name": "Kind", 20 "type": "enum", 21 "fields": [ 22 { 23 "name": "USER", 24 "type": "uint32", 25 "value": "1" 26 }, 27 { 28 "name": "ADMIN", 29 "type": "uint32", 30 "value": "2" 31 } 32 ] 33 }, 34 { 35 "name": "Empty", 36 "type": "struct", 37 "fields": [ 38 ] 39 }, 40 { 41 "name": "GetUserRequest", 42 "type": "struct", 43 "fields": [ 44 { 45 "name": "userID", 46 "type": "uint64", 47 "optional": false 48 } 49 ] 50 }, 51 { 52 "name": "User", 53 "type": "struct", 54 "fields": [ 55 { 56 "name": "ID", 57 "type": "uint64", 58 "optional": false, 59 "meta": [ 60 { "json": "id" }, 61 { "go.tag.db": "id" } 62 ] 63 }, 64 { 65 "name": "username", 66 "type": "string", 67 "optional": false, 68 "meta": [ 69 { "json": "USERNAME" }, 70 { "go.tag.db": "username" } 71 ] 72 }, 73 { 74 "name": "createdAt", 75 "type": "timestamp", 76 "optional": true, 77 "meta": [ 78 { "go.tag.json": "createdAt,omitempty" }, 79 { "go.tag.db": "created_at" } 80 ] 81 } 82 83 ] 84 }, 85 { 86 "name": "RandomStuff", 87 "type": "struct", 88 "fields": [ 89 { 90 "name": "meta", 91 "type": "map<string,any>" 92 }, 93 { 94 "name": "metaNestedExample", 95 "type": "map<string,map<string,uint32>>" 96 }, 97 { 98 "name": "namesList", 99 "type": "[]string" 100 }, 101 { 102 "name": "numsList", 103 "type": "[]int64" 104 }, 105 { 106 "name": "doubleArray", 107 "type": "[][]string" 108 }, 109 { 110 "name": "listOfMaps", 111 "type": "[]map<string,uint32>" 112 }, 113 { 114 "name": "listOfUsers", 115 "type": "[]User" 116 }, 117 { 118 "name": "mapOfUsers", 119 "type": "map<string,User>" 120 }, 121 { 122 "name": "user", 123 "type": "User" 124 } 125 ] 126 } 127 ], 128 "services": [ 129 { 130 "name": "ExampleService", 131 "methods": [ 132 { 133 "name": "Ping", 134 "inputs": [], 135 "outputs": [ 136 { 137 "name": "status", 138 "type": "bool" 139 } 140 ] 141 }, 142 { 143 "name": "GetUser", 144 "name": "GetUser", 145 "inputs": [ 146 { 147 "name": "header", 148 "type": "map<string,string>" 149 }, 150 { 151 "name": "req", 152 "type": "GetUserRequest" 153 } 154 ], 155 "outputs": [ 156 { 157 "name": "code", 158 "type": "uint32" 159 }, 160 { 161 "name": "user", 162 "type": "User" 163 } 164 ] 165 } 166 ] 167 } 168 ] 169 } 170 ` 171 172 func TestGenTypescript(t *testing.T) { 173 g := &generator{} 174 175 s, err := schema.ParseSchemaJSON([]byte(input)) 176 assert.NoError(t, err) 177 178 o, err := g.Gen(s, gen.TargetOptions{PkgName: "test", Client: true, Server: true}) 179 assert.NoError(t, err) 180 _ = o 181 182 log.Printf("o: %v", o) 183 }