public function loadFromSnapshot(AggregateInterface $aggregate, Snapshot $snapshot): AggregateInterface
    {
        $snapshotData = $snapshot->getPayload();

        $aggregate->setVersion($snapshot->getVersion());
        $aggregate->setSnapshotVersion($snapshot->getVersion());
        $aggregate->setCreated($snapshot->getAggregateCreated());
        $aggregate->setModified($snapshot->getAggregateModified());
        $aggregate->setUuid($snapshot->getUuid());
        $aggregate->setHistory($snapshot->getHistory());

        // Load data from other public properties.
        $properties = get_object_vars($aggregate);

        foreach ($properties as $property => $existingValue) {
            // Skip Modified and Created public properties.
            if ('created' === $property || 'modified' === $property) {
                continue;
            }
            // Todo: Convert json date to php DateTime.

            if (isset($snapshotData[$property])) {
                $aggregate->{$property} = $snapshotData[$property];
            }
        }

        return $aggregate;
    }