The aim of this change is to make the `Doc` type more safe to use by approaching the design via [Parse don't validate][[0]] approach. The problem with the previous approach was that all field were `pub` and thus a `Doc<Verified>` could easily be mutated and serialized. Granted, the code that used the serialization would tend to verify the `Doc` first, however, this approach *ensures* that only a verified `Doc` can be serialized. It also meant that trying to add new data that would follow the parse approach would require more generic parameters on top of the existing `PhantomData` parameter, i.e. we need to do something like: `Doc<RawField, V> -> Doc<ValidField, V>`. The new approach splits the type into two separate types: `RawDoc` and `Doc`. The former is allowed to be mutated at will, and uses types that are less strict. The latter is the valid type that can only be constructed by validating a `RawDoc` (or the `initial` constructor). The `Doc` type's fields can then only be accessed by read-only methods. Solves the problems above by only allowing mutations to `RawDoc`, as well as, new fields being added to `RawDoc` which are then validated via `RawDoc::verified`. [0]: https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/ |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||