(depth: number, innerTabs: any, scope: any, omitempty?: any)
| 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]]) |
no test coverage detected