Skip to main content

onetaskgraph_plugin_api/
lib.rs

1//! The contract every onetaskgraph source is written against.
2//!
3//! This crate holds exactly what a plugin author needs in order to implement a
4//! source, and nothing else: the two traits, the work types, the query and paging
5//! types, the capability declaration, and the error enum. The engine that drives
6//! sources lives in `onetaskgraph-core`, and **no plugin crate may depend on it**:
7//! `deny.toml` permits that crate exactly one wrapper, the binary, failing the
8//! required `deny` job, and `scripts/check-plugin-isolation.sh` reads the real
9//! `cargo metadata` graph inside `just check`.
10//!
11//! Keeping this crate still is the point. Every change here rebuilds and re-tests
12//! every plugin, which is exactly the cost the split exists to avoid paying on an
13//! ordinary engine change. When a new type could plausibly sit on either side, it
14//! belongs in `onetaskgraph-core` unless a trait signature names it.
15#![deny(missing_docs)]
16
17mod asset;
18mod batch;
19mod cache;
20mod capability;
21mod clock;
22mod comment;
23mod error;
24mod guard;
25mod held;
26mod id;
27mod issue;
28mod metadata;
29mod metering;
30mod projection;
31mod query;
32mod relation;
33mod section;
34mod source;
35mod status_mapping;
36mod update;
37mod visibility;
38mod work;
39mod write;
40
41pub use asset::{
42    Asset, AssetContentType, AssetName, AssetPayload, AssetUpload, AssetUploads, AssetWrite,
43    AssetsWritten, asset_references, asset_sha256, assetless, body_digest, is_sha256,
44    rewrite_asset_references, serve_asset_references,
45};
46pub use batch::{BatchAnswer, BatchComment, BatchUpdate, decided_on, version_at};
47pub use cache::{
48    Coverage, DocumentVersionCoverage, JournalEntry, PartOutcome, ProjectVersionCoverage,
49    RequestKind, Shown, VersionCoverage, WholeTask, WriteJournal,
50};
51pub use capability::{Capabilities, DependencySupport, Support};
52pub use clock::{Clock, SIMULATED_CLOCK_VARIABLE, SharedClock, WaitCause, system_clock};
53pub use comment::{
54    AuthorKind, Comment, CommentBody, CommentCopy, CommentOrigin, NewComment, TaskDetailRead,
55    commentless,
56};
57pub use error::SourceError;
58pub use guard::WriteGuard;
59pub use held::HeldVersion;
60pub use id::{NativeId, SOURCE_NAME_PATTERN, SourceName};
61pub use issue::{
62    ClosedAs, Completion, ContradictedItem, HeldTask, ISSUE_REF_PATTERN, IssueHolding, IssueRef,
63    StatusContradiction,
64};
65pub use metadata::{MetadataKey, MetadataRecord, unwritable_metadata};
66pub use metering::{Metered, Metering};
67pub use projection::ProjectedValue;
68pub use query::{
69    Cursor, DocumentQuery, LabelFilter, MetadataMatch, Page, PageRequest, ProjectFilter,
70    ProjectQuery, TaskQuery, TextFields, TextQuery,
71};
72pub use relation::{
73    LINKS_HEADING, LinkDirection, LinkTypeConfig, LinkTypes, NativeLink, NativeWord, ParentAnswer,
74    ParentWrite, Relations, TaskLink, arrow, link_line, read_content, relationless, relinked,
75    strip_links_section, with_links_section,
76};
77pub use section::{BodyMarkup, SharedBodyMarkup, StoredHeading};
78pub use source::{Health, SecretResolver, SourcePlugin, TaskSource};
79pub use status_mapping::{StatusMapping, StatusName, StatusNames, UnmappedStatus};
80pub use update::{TaskUpdate, TaskUpdateOutcome, UpdatedField};
81pub use visibility::{Visibility, WriteTarget};
82pub use work::{
83    Classification, DependencyEdge, DependencyEndpoint, DependencyKind, Designator, Direction,
84    Document, EndpointRefusal, ItemKind, Label, Location, Priority, Project, Repository, Status,
85    StatusCategory, Task, TaskRef,
86};
87pub use write::{BodySize, ItemWrite, WriteSupport, documentless, unwritable, unwritable_field};