/**
  * @param Document $document
  * @return string
  */
 public function marshall(Document $document) : string
 {
     $fragments = $document->getFragments();
     $document = [self::KEY_VERSION => self::VERSION_1, self::KEY_FRAGMENTS => []];
     foreach ($fragments as $fragment) {
         $document[self::KEY_FRAGMENTS][] = $this->fragmentMarshaller->marshall($fragment);
     }
     $document[self::KEY_CHECKSUM] = $this->calculateFragmentsChecksum($fragments);
     return json_encode($document);
 }
 /**
  * @test
  * @dataProvider boolProvider
  */
 public function testBooleans($testValue)
 {
     $marshaller = new DocumentFragment\Marshaller();
     $fragment = new DocumentFragment("test", $testValue);
     $marshalledFragment = $marshaller->marshall($fragment);
     $unmarshalledFragment = $marshaller->unmarshall($marshalledFragment);
     $this->assertEquals("test", $unmarshalledFragment->getName());
     $this->assertEquals($testValue ? 1 : 0, $unmarshalledFragment->getData());
 }