MCPcopy
hub / github.com/xpf0000/FlyEnv / parseStruct

Function parseStruct

src/render/util/transform/Go.ts:136–201  ·  view source on GitHub ↗
(depth: number, innerTabs: any, scope: any, omitempty?: any)

Source from the content-addressed store, hash-verified

134 }
135
136 function parseStruct(depth: number, innerTabs: any, scope: any, omitempty?: any) {
137 if (flatten) {
138 stack.push(depth >= 2 ? '\n' : '')
139 }
140
141 const seenTypeNames: any[] = []
142
143 if (flatten && depth >= 2) {
144 const parentType = `type ${parent}`
145 const scopeKeys = formatScopeKeys(Object.keys(scope))
146
147 // this can only handle two duplicate items
148 // future improvement will handle the case where there could
149 // three or more duplicate keys with different values
150 if (parent in seen && compareObjectKeys(scopeKeys, seen[parent])) {
151 stack.pop()
152 return
153 }
154 seen[parent] = scopeKeys
155
156 appender(`${parentType} struct {\n`)
157 ++innerTabs
158 const keys = Object.keys(scope)
159 for (const i in keys) {
160 const keyname = getOriginalName(keys[i])
161 indenter(innerTabs)
162 const typename = uniqueTypeName(format(keyname), seenTypeNames)
163 seenTypeNames.push(typename)
164
165 appender(typename + ' ')
166 parent = typename
167 parseScope(scope[keys[i]], depth)
168 appender(' `json:"' + keyname)
169 if (allOmitempty || (omitempty && omitempty[keys[i]] === true)) {
170 appender(',omitempty')
171 }
172 appender('"`\n')
173 }
174 indenter(--innerTabs)
175 appender('}')
176 } else {
177 append('struct {\n')
178 ++tabs
179 const keys = Object.keys(scope)
180 for (const i in keys) {
181 const keyname = getOriginalName(keys[i])
182 indent(tabs)
183 const typename = uniqueTypeName(format(keyname), seenTypeNames)
184 seenTypeNames.push(typename)
185 append(typename + ' ')
186 parent = typename
187 parseScope(scope[keys[i]], depth)
188 append(' `json:"' + keyname)
189 if (allOmitempty || (omitempty && omitempty[keys[i]] === true)) {
190 append(',omitempty')
191 }
192 if (example && scope[keys[i]] !== '' && typeof scope[keys[i]] !== 'object') {
193 append('" example:"' + scope[keys[i]])

Callers 1

parseScopeFunction · 0.85

Calls 11

formatScopeKeysFunction · 0.85
compareObjectKeysFunction · 0.85
appenderFunction · 0.85
getOriginalNameFunction · 0.85
indenterFunction · 0.85
uniqueTypeNameFunction · 0.85
formatFunction · 0.85
parseScopeFunction · 0.85
appendFunction · 0.85
indentFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected