* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class Go extends CodeGeneratorAbstract { /** * @inheritDoc */ public function getFileName(string $file): string { return $file . '.go'; } /** * @inheritDoc */ protected function newTypeGenerator(array $mapping): GeneratorInterface { return new Type\Go($mapping); } /** * @inheritDoc */ protected function writeStruct( string $name, array $properties, ?string $extends, ?array $generics, StructType $origin, ): string { $code = 'type ' . $name . ' struct {' . "\n"; if (!empty($extends)) { $code.= $this->indent . '*' . $extends . "\n"; } foreach ($properties as $name => $property) { /** @var Code\Property $property */ $code.= $this->indent . ucfirst($name) . ' ' . $property->getType() . ' `json:"' . $property->getName() . '"`' . "\n"; } $code.= '}' . "\n"; return $code; } protected function writeMap(string $name, string $type, MapType $origin): string { $subType = $this->generator->getType($origin->getAdditionalProperties()); return 'type ' . $name . ' = map[string]' . $subType . "\n"; } protected function writeReference(string $name, string $type, ReferenceType $origin): string { return 'type ' . $name . ' = ' . $type . "\n"; } protected function writeHeader(TypeAbstract $origin): string { $code = "\n"; if (!empty($this->namespace)) { $code.= 'package ' . $this->namespace . "\n"; } $imports = $this->getImports($origin); if (!empty($imports)) { $code.= "\n"; $code.= implode("\n", $imports); $code.= "\n"; } $code.= "\n"; $comment = $origin->getDescription(); if (!empty($comment)) { $code.= '// ' . $comment . "\n"; } return $code; } private function getImports(TypeAbstract $origin): array { $imports = []; if (TypeUtil::contains($origin, StringType::class, TypeAbstract::FORMAT_DURATION)) { $imports[] = 'import "time"'; } elseif (TypeUtil::contains($origin, StringType::class, TypeAbstract::FORMAT_DATE)) { $imports[] = 'import "time"'; } elseif (TypeUtil::contains($origin, StringType::class, TypeAbstract::FORMAT_TIME)) { $imports[] = 'import "time"'; } elseif (TypeUtil::contains($origin, StringType::class, TypeAbstract::FORMAT_DATETIME)) { $imports[] = 'import "time"'; } return $imports; } } __halt_compiler();----SIGNATURE:----SGx9iipTGcU7Rvd9jqHkq1ux9og+9a3gVy6bhoFxQ4IaF3mWP72Fjv82d26nwkVe7FdP1KAeLCEzugi5iUD4jv9RfYRVEzbA/morHdL5adSa6LSh1wKu+DPL+bxWhgfrM35bqKkwcFGwQDSTuU09S5j75JiHpseVyDEcetnZOMWonyaXxhhugz0ER9plMTC5MGAKCA2z7HBDhEUwqvVzvVMqMnQnxUY9P66jG3+RvHDT83hjEg3Do1A/d8M0iqEu5e0Wu9C/AYgiX9q+sssZqzoD026rZXtyGAsqXMogOd1aEcoC2ZXJ73xIa7v4/9k20pN3MjKVFUdsK+XzQBkbxpb0w4VC2tBsk6FKKE6Uxo1x19jFIV4iKS5h+uZf6DGRZSuMprSXs/f3CMPpngci3U8EwnocDO4AohCR8gNx4CmC1S6jByeIMhhwzN6LEMsGHY9J+OYY7A61hUz9k/hAJUCOl0/KLERZA7/TzXWhaDhwwPEVY9QNs8A8jODkRkPDMgTsHck8F84HEXJPuwMetDkDx3mTSN+S2VsHc5FSPcbumNgWiGMsWJBbhg197z1HryaU4MRLBpUDoDiMbS1bjEl6ohAg8L0h/FRZsGPXUPww1cr5QB0mZfKALPXAomnYklzRU3XjQDMw0m6lr89+xIpJ192HTIFLyywgCPQUBmg=----ATTACHMENT:----MzUyNTY0NzM1MjI3ODIxNSA4MTAzNTEwOTcxMjIzMDg1IDI5ODA4NDgxNDg0MzA4MTU=