85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php // "name":"Call on web APIs", "author":"Noccy"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace SparkPlug\Com\Noccy\ApiClient\Api;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use JsonSerializable;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Catalog implements JsonSerializable
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    private array $properties = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private array $methods = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private ?string $name;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private ?string $info;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function __construct(array $catalog=[])
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $catalog = $catalog['catalog']??[];
							 | 
						||
| 
								 | 
							
								        $this->name = $catalog['name']??null;
							 | 
						||
| 
								 | 
							
								        $this->info = $catalog['info']??null;
							 | 
						||
| 
								 | 
							
								        foreach ($catalog['props']??[] as $k=>$v) {
							 | 
						||
| 
								 | 
							
								            $this->properties[$k] = $v;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        foreach ($catalog['methods']??[] as $k=>$v) {
							 | 
						||
| 
								 | 
							
								            $this->methods[$k] = new Method($v);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function createFromFile(string $filename): Catalog
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $json = file_get_contents($filename);
							 | 
						||
| 
								 | 
							
								        $catalog = json_decode($json, true);
							 | 
						||
| 
								 | 
							
								        $catalog['name'] = basename($filename, ".json");
							 | 
						||
| 
								 | 
							
								        return new Catalog($catalog);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getName(): ?string
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->name;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getInfo(): ?string
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->info;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getProperties(): array
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->properties;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function applyProperties(array $props)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->properties = array_merge($this->properties, $props);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function addMethod(string $name, Method $method)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->methods[$name] = $method;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getMethod(string $method): ?Method
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->methods[$method]??null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getMethods(): array
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return $this->methods;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function jsonSerialize(): mixed
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'catalog' => [
							 | 
						||
| 
								 | 
							
								                'name' => $this->name,
							 | 
						||
| 
								 | 
							
								                'info' => $this->info,
							 | 
						||
| 
								 | 
							
								                'props' => $this->properties,
							 | 
						||
| 
								 | 
							
								                'methods' => $this->methods,
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |