pardarsh_core/lib.rs
1//! # pardarsh-core
2//!
3//! Application-agnostic infrastructure for the Public Decision Graph:
4//! stable identifiers, a common record envelope with typed extensions,
5//! attributable append-only history, provenance, typed relationships,
6//! validation, storage interfaces, visibility primitives, and a verifiable
7//! interchange format.
8//!
9//! This crate knows nothing about any particular application. Issue
10//! workflows, moderation policy, accounts and UI belong to applications
11//! built on top of it.
12//!
13//! ```
14//! use pardarsh_core::prelude::*;
15//!
16//! let origin = Origin::new("example.org").unwrap();
17//! let mut repo = Repository::new(MemoryStore::new(origin), Validator::default());
18//! let actor = Attribution::system("docs");
19//! let issue = repo
20//! .create(RecordDraft::new(RecordKind::Issue, "Streetlight out on 4th Cross"), Meta::by(actor.clone()))
21//! .unwrap()
22//! .record;
23//! let evidence = repo
24//! .create(
25//! RecordDraft::new(RecordKind::Evidence, "Photo after dark")
26//! .source(SourceRef::new("https://example.org/photo.jpg").authority(SourceAuthority::UserSubmitted))
27//! .relation(RelationDraft::new(RelationKind::Supports, issue.id.clone())),
28//! Meta::by(actor),
29//! )
30//! .unwrap()
31//! .record;
32//! let supporting = pardarsh_core::graph::incoming(repo.store(), &issue.id, &[RelationKind::Supports], &[]).unwrap();
33//! assert_eq!(supporting[0].source, evidence.id);
34//! ```
35
36pub mod access;
37pub mod error;
38pub mod event;
39pub mod extension;
40pub mod federation;
41pub mod graph;
42pub mod id;
43pub mod interchange;
44pub mod model;
45pub mod projection;
46pub mod provenance;
47pub mod relation;
48pub mod repository;
49pub mod schema;
50pub mod storage;
51pub mod validation;
52
53pub use error::{Error, Result};
54
55/// The commonly used types.
56pub mod prelude {
57 pub use crate::access::{Viewer, view_history, view_record};
58 pub use crate::error::{Error, Result};
59 pub use crate::event::{Change, Event, EventKind, FieldPath};
60 pub use crate::extension::{ExtValue, ExtensionRegistry, ExtensionSchema, FieldSpec, FieldType};
61 pub use crate::id::{EventId, NamespacedName, Origin, RecordId, RelationId, SourceId};
62 pub use crate::model::{
63 ActorRef, ActorRole, ActorRoleKind, Attribution, Disclosure, Lifecycle, Record, RecordDraft, RecordKind,
64 Timestamp, Visibility,
65 };
66 pub use crate::projection::TimelineEntry;
67 pub use crate::provenance::{ContentHash, Derivation, SourceAuthority, SourceRef};
68 pub use crate::relation::{Certainty, Relation, RelationDraft, RelationKind};
69 pub use crate::repository::{Clock, Committed, ManualClock, Meta, Repository, SystemClock};
70 pub use crate::schema::{ENVELOPE_SCHEMA_VERSION, SchemaVersion};
71 #[cfg(feature = "sqlite")]
72 pub use crate::storage::SqliteStore;
73 pub use crate::storage::{MemoryStore, RecordQuery, Store};
74 pub use crate::validation::{ValidationErrors, Validator};
75}