public function execute(Command $command) : Layout
 {
     $xml = $this->connection->execute($command, self::GRAMMAR_PATH);
     $errorCode = (int) $xml->ERRORCODE;
     if ($errorCode > 0) {
         throw FileMakerException::fromErrorCode($errorCode);
     }
     return new Layout((string) $xml->LAYOUT['DATABASE'], (string) $xml->LAYOUT['NAME'], ...$this->parseFields($xml, $this->parseValueLists($xml)));
 }
 private function getWrappedStream() : StreamInterface
 {
     if (null !== $this->wrappedStream) {
         return $this->wrappedStream;
     }
     return $this->wrappedStream = $this->connection->getAsset($this->assetUri);
 }
 public function execute(Command $command) : CollectionInterface
 {
     $xml = $this->connection->execute($command, self::GRAMMAR_PATH);
     $errorCode = (int) $xml->error['code'];
     $dataSource = $xml->datasource;
     if (8 === $errorCode || 401 === $errorCode) {
         // "Empty result" or "No records match the request"
         return new ItemCollection([], 0);
     } elseif ($errorCode > 0) {
         throw FileMakerException::fromErrorCode($errorCode);
     }
     try {
         $metadata = $this->parseMetadata($xml->metadata[0]);
         $records = [];
         foreach ($xml->resultset[0]->record as $record) {
             $records[] = $this->parseRecord($record, $metadata);
         }
     } catch (UnknownFieldException $e) {
         throw UnknownFieldException::fromConcreteException((string) $dataSource['database'], (string) $dataSource['table'], (string) $dataSource['layout'], $e);
     } catch (Exception $e) {
         throw ParseException::fromConcreteException((string) $dataSource['database'], (string) $dataSource['table'], (string) $dataSource['layout'], $e);
     }
     return new ItemCollection($records, (int) $xml->resultset[0]['count']);
 }