*/ public array $items; /** @param list $items */ public function __construct( RunFindingCounts $counts, array $items ) { $this->counts = $counts; $this->items = array_values( $items ); } /** @param array $payload API boundary payload. */ public static function from_payload( array $payload ): ?self { $counts_payload = $payload['counts'] ?? null; $items_payload = $payload['findings'] ?? null; $counts = is_array( $counts_payload ) ? RunFindingCounts::from_payload( $counts_payload ) : null; if ( ! $counts instanceof RunFindingCounts || ! is_array( $items_payload ) ) { return null; } return new self( $counts, self::items_from_payload( $items_payload ) ); } /** @return array Local option boundary payload. */ public function to_payload(): array { return array( 'counts' => $this->counts->to_payload(), 'findings' => array_map( static fn ( RunFinding $item ): array => $item->to_payload(), $this->items ), ); } /** @param array $payload @return list */ private static function items_from_payload( array $payload ): array { $items = array(); foreach ( $payload as $item_payload ) { $item = is_array( $item_payload ) ? RunFinding::from_payload( $item_payload ) : null; if ( $item instanceof RunFinding ) { $items[] = $item; } } return $items; } }