public function saveSnapshot(AggregateRoot $aggregate)
    {
        if (is_null($this->snapshotStore)) {
            throw new \Exception('Unable to create snapshot; No store attached');
        }

        if ($aggregate->hasChanges()) {
            $aggregate = $aggregate::reconstituteFrom(
                new CommittedEvents(
                    $aggregate->getIdentity(),
                    $aggregate->getChanges()->getEvents()
                )
            );
        }

        return $this->snapshotStore->save($aggregate);
    }