radicle-heartwood-lfs/radicle/src
Fintan Halpenny de1958fab0 radicle: refactor doc
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/
2024-10-22 14:58:12 +01:00
..
canonical Update toolchain to Rust 1.71 2023-08-09 18:49:13 +02:00
cob radicle: refactor doc 2024-10-22 14:58:12 +01:00
git radicle: Fix log when delegate is not found 2024-08-06 16:36:27 +02:00
identity radicle: refactor doc 2024-10-22 14:58:12 +01:00
logger node: Improved message logging 2024-04-23 10:41:43 +02:00
node radicle: Fix clippy warnings around `unwrap` 2024-10-21 16:42:06 +02:00
storage radicle: refactor doc 2024-10-22 14:58:12 +01:00
test radicle: refactor doc 2024-10-22 14:58:12 +01:00
canonical.rs radicle: custom CanonicalFormatter 2023-02-24 11:59:36 +01:00
cli.rs cli: Hints system 2023-11-23 11:07:07 +01:00
cob.rs cli: Log errors when COBs can't load 2024-08-09 10:47:54 +02:00
collections.rs Introduce `cargo-deny` 2023-08-22 14:33:00 +02:00
explorer.rs Rename `Id` to `RepoId` 2024-01-22 15:51:44 +01:00
git.rs Include new `rad/root` in signed refs 2024-10-21 16:32:49 +02:00
identity.rs radicle: refactor doc 2024-10-22 14:58:12 +01:00
io.rs radicle: Fix file limit setting for FreeBSD 2024-05-21 13:48:44 +02:00
lib.rs radicle: refactor doc 2024-10-22 14:58:12 +01:00
logger.rs cli: Have a way of enabling logging in helper 2024-01-17 17:34:30 +01:00
node.rs radicle: Fix clippy warnings around `unwrap` 2024-10-21 16:42:06 +02:00
profile.rs radicle: Fix clippy warnings around `unwrap` 2024-10-21 16:42:06 +02:00
rad.rs radicle: refactor doc 2024-10-22 14:58:12 +01:00
serde_ext.rs radicle: Fix clippy warnings around `unwrap` 2024-10-21 16:42:06 +02:00
sql.rs radicle: Improve SQL type errors 2024-06-13 11:28:09 +02:00
storage.rs radicle: refactor doc 2024-10-22 14:58:12 +01:00
test.rs radicle: fix tests to not leave temporary files behind 2024-04-24 11:47:14 +02:00
version.rs radicle: Fix clippy warnings around `unwrap` 2024-10-21 16:42:06 +02:00
web.rs node: Change node web config metadata fields 2024-07-18 13:56:31 +02:00