pub struct HistoricalDatabase { /* private fields */ }Expand description
Main database handle wrapping a SeaORM connection. All knowledge-graph queries and mutations go through this struct.
Implementations§
Source§impl HistoricalDatabase
impl HistoricalDatabase
Sourcepub async fn connect(url: &str) -> Result<Self>
pub async fn connect(url: &str) -> Result<Self>
Connect to the database and return a new handle. Runs the
in-place schema migrations (currently just
Self::migrate_schema) so opening a pre-existing KG that
predates a column addition silently upgrades to the current
shape before any read hits a missing column.
Sourcepub async fn begin(&self) -> Result<DatabaseTransaction>
pub async fn begin(&self) -> Result<DatabaseTransaction>
Open a fresh database transaction. Exposed so callers that
need to compose multiple write methods atomically can drive
the txn lifetime themselves — e.g. workflow learn admits a
project via Self::write_project_completed_txn AND then
enqueues its new canonicals via
Self::enqueue_pending_canonical_semantics_txn in the
SAME transaction, so a kill between the two steps rolls
back the whole thing.
Sourcepub async fn init(&self) -> Result<()>
pub async fn init(&self) -> Result<()>
One-shot lifecycle setup: create tables, run idempotent
schema migrations, and seed the static taxonomies. The whole
thing runs inside a single transaction so a kill mid-init
either leaves the DB completely untouched OR fully set up —
never half-seeded. Without this guard, a partial seed (e.g.
only 2 of 14 DeFi categories inserted before SIGKILL) would
stick because both seed loops short-circuit on if !existing .is_empty(), and write_project_completed later silently
drops project_category links for missing category names
(db.rs:~2965 just tracing::warn! and continues).
Sourcepub async fn schema_is_initialized(&self) -> Result<bool>
pub async fn schema_is_initialized(&self) -> Result<bool>
Read-only probe for whether this database already holds the
historical-KG schema. Consumers (workflow streamloop /
autoloop, agentic map-semantics) call this so they can skip
the write-requiring Self::init when pointed at a
pre-populated DB — including one exposed through a SELECT-only
grant (e.g. a read-only MySQL replica), where the CREATE TABLE
/ ALTER TABLE in init would be denied and is unnecessary.
Presence of the project table is the marker: every initialized
KG has it, and it’s the first table create_tables emits.
Sourcepub async fn migrate_schema(&self) -> Result<()>
pub async fn migrate_schema(&self) -> Result<()>
Apply every idempotent in-place schema migration this crate
knows about. SQLite-only; no-op on other backends since
production deployments stick to SQLite for the historical KG.
Each individual migration is itself idempotent — calling
migrate_schema repeatedly is cheap (a few PRAGMA introspect
queries) and safe.
pub async fn export_sql_snapshot(&self) -> Result<String>
pub async fn export_json_snapshot(&self) -> Result<String>
pub async fn import_sql_snapshot(&self, sql: &str) -> Result<usize>
pub async fn import_json_snapshot(&self, json: &str) -> Result<usize>
pub async fn import_knowledge_graph( &self, graph: &KnowledgeGraph, ) -> Result<usize>
Sourcepub async fn clobber_into(&self, dst: &HistoricalDatabase) -> Result<usize>
pub async fn clobber_into(&self, dst: &HistoricalDatabase) -> Result<usize>
Drop every table in dst, recreate the schema fresh, then
copy every row of every table from self into dst inside
one destination-side transaction. Source IDs are preserved.
Backend-agnostic: source and destination may be different
SeaORM backends (sqlite ↔ mysql ↔ postgres) because all I/O
goes through the ORM rather than dialect-specific SQL.
Sourcepub async fn merge_into(&self, dst: &HistoricalDatabase) -> Result<usize>
pub async fn merge_into(&self, dst: &HistoricalDatabase) -> Result<usize>
Append every row from self into dst without touching
dst’s existing rows. Auto-increment PKs are reassigned on
insert and every FK is rewritten through an in-memory id map
so foreign-key constraints stay intact. Seeded reference
tables (category, finding_category) are matched on their
natural keys so the dst’s init()-seeded rows are reused
instead of duplicated. Caller is responsible for ensuring
dst.init() has run before this is invoked.
Sourcepub async fn get_project_by_platform_id(
&self,
platform_id: &str,
) -> Result<Option<Model>>
pub async fn get_project_by_platform_id( &self, platform_id: &str, ) -> Result<Option<Model>>
Find a project by its platform ID (e.g. “c4-420”).
pub async fn get_project_by_name(&self, name: &str) -> Result<Option<Model>>
pub async fn get_project_by_id(&self, id: i32) -> Result<Option<Model>>
Sourcepub async fn is_project_completed(&self, platform_id: &str) -> Result<bool>
pub async fn is_project_completed(&self, platform_id: &str) -> Result<bool>
Check if a project with this platform_id is already completed.
Sourcepub async fn get_project_platform(
&self,
project_id: i32,
) -> Result<Option<Model>>
pub async fn get_project_platform( &self, project_id: i32, ) -> Result<Option<Model>>
Get the platform info for a project.
Sourcepub async fn set_platform_id(
&self,
project_id: i32,
platform_id: &str,
) -> Result<()>
pub async fn set_platform_id( &self, project_id: i32, platform_id: &str, ) -> Result<()>
Set or update the platform ID for a project.
pub async fn list_completed_projects( &self, ) -> Result<Vec<(Model, Option<Model>)>>
pub async fn list_semantics_by_project( &self, project_id: i32, ) -> Result<Vec<(Model, Vec<Model>)>>
pub async fn search_semantics( &self, query: &str, ) -> Result<Vec<(Model, String)>>
Sourcepub async fn canonical_semantics_with_children_for_categories(
&self,
categories: &[DeFiCategory],
) -> Result<Vec<CanonicalWithChildren<Model>>>
pub async fn canonical_semantics_with_children_for_categories( &self, categories: &[DeFiCategory], ) -> Result<Vec<CanonicalWithChildren<Model>>>
Fetch existing canonical semantic nodes (= survivors of any merge)
for the given categories, paired with the raw children that have
been merged into each canonical. The merge orchestrator renders
each canonical with its children so the LLM’s updated_*
generalisations can take prior merges into account.
Sourcepub async fn existing_semantics_for_categories(
&self,
categories: &[DeFiCategory],
) -> Result<Vec<Model>>
pub async fn existing_semantics_for_categories( &self, categories: &[DeFiCategory], ) -> Result<Vec<Model>>
Fetch existing active semantic nodes for the given categories. Returns nodes that have NOT been merged away.
Sourcepub async fn findings_for_semantic_ids(
&self,
semantic_ids: &[i32],
) -> Result<Vec<LinkedFinding>>
pub async fn findings_for_semantic_ids( &self, semantic_ids: &[i32], ) -> Result<Vec<LinkedFinding>>
Fetch every finding linked to any of semantic_ids via
semantic_finding_link. Returns (semantic_node_id, finding_model) pairs;
the same finding may appear multiple times if it is linked to multiple
semantics in the input set.
Findings linked to any of the given semantic ids OR to any raw
(merged-away) semantic that resolves to one of those ids.
Each returned tuple uses the canonical semantic id (one of the inputs) as the first element regardless of whether the link’s source row was on the canonical or on a raw child. This lets callers reason about findings against the canonical they matched on without having to handle merge chains themselves.
pub async fn semantic_link_candidates_for_categories( &self, categories: &[DeFiCategory], ) -> Result<Vec<(Model, i32)>>
Sourcepub async fn all_canonical_semantic_link_candidates(&self) -> Result<Vec<Model>>
pub async fn all_canonical_semantic_link_candidates(&self) -> Result<Vec<Model>>
All canonical semantics across every category, with merged-away aliases excluded. Linking is one-time, so this is the single candidate set we present to the LLM regardless of the pending finding’s project category.
pub async fn load_semantic_scope_seed(&self) -> Result<Vec<SemanticScopeSeed>>
pub async fn load_vulnerability_scope_seed( &self, ) -> Result<Vec<VulnerabilityScopeSeed>>
Sourcepub async fn canonical_findings_with_children_for_categories(
&self,
categories: &[VulnerabilityCategory],
) -> Result<Vec<FindingCanonicalWithTaxonomy>>
pub async fn canonical_findings_with_children_for_categories( &self, categories: &[VulnerabilityCategory], ) -> Result<Vec<FindingCanonicalWithTaxonomy>>
Fetch existing canonical findings (= survivors of any merge) for
the given vulnerability categories, paired with their taxonomy
entry and the raw children that have been merged into each
canonical. Mirrors
Self::canonical_semantics_with_children_for_categories.
pub async fn existing_findings_for_categories( &self, categories: &[VulnerabilityCategory], ) -> Result<Vec<(Model, Model)>>
pub async fn list_pending_findings_for_linking( &self, ) -> Result<Vec<PendingFindingForLinking>>
pub async fn list_findings_for_linking( &self, include_unlinked: bool, ) -> Result<Vec<PendingFindingForLinking>>
pub async fn write_finding_link_result( &self, result: &PersistedFindingLinkResult, ) -> Result<()>
Sourcepub async fn upsert_finding_link_partial(
&self,
result: &PersistedFindingLinkResult,
) -> Result<()>
pub async fn upsert_finding_link_partial( &self, result: &PersistedFindingLinkResult, ) -> Result<()>
Partial-commit hook for the link runner: durably persist the
links discovered by ONE batch for this finding. The finding
stays out of finding_link_status until
[mark_finding_link_complete] runs, so downstream consumers
(mapper, spec-gen) skip the still-partial sfl rows via
load_knowledge_graph’s gate. Mid-flight crashes leave the
sfl rows in place; the next pass re-emits the same edges and
the strongest-strength-wins upsert is idempotent.
Sourcepub async fn mark_finding_link_complete(&self, finding_id: i32) -> Result<()>
pub async fn mark_finding_link_complete(&self, finding_id: i32) -> Result<()>
Counterpart to Self::upsert_finding_link_partial: insert
the finding_link_status row so downstream consumers start
seeing the finding’s links. No-op if the row already exists
(resume-safe).
Sourcepub async fn list_findings_with_link_status(
&self,
) -> Result<Vec<PendingFindingForLinking>>
pub async fn list_findings_with_link_status( &self, ) -> Result<Vec<PendingFindingForLinking>>
Findings that have been globally linked already (i.e., have a row in
finding_link_status). Used by the retro-link pass to feed the LLM
the set of findings that should be re-checked against newly-introduced
canonical semantics queued in pending_semantic.
Sourcepub async fn list_pending_canonical_semantics(&self) -> Result<Vec<Model>>
pub async fn list_pending_canonical_semantics(&self) -> Result<Vec<Model>>
Currently-queued canonical semantics waiting for retro-link consideration.
Sourcepub async fn append_semantic_finding_links(
&self,
edges: &[LinkEdge],
) -> Result<usize>
pub async fn append_semantic_finding_links( &self, edges: &[LinkEdge], ) -> Result<usize>
Append (canonical_semantic_id, finding_id, strength, evidence)
rows to semantic_finding_link. Idempotent on the composite
primary key: existing rows are left untouched (use a separate
upsert helper if you need to overwrite strength/evidence; the
current write path is append-only). Does NOT touch
finding_link_status — retro-link is for findings already there.
Sourcepub async fn clear_pending_semantic_queue(&self) -> Result<usize>
pub async fn clear_pending_semantic_queue(&self) -> Result<usize>
Empty the pending_semantic queue. Run after retro-link successfully
processed the queued semantics against the existing finding_link_status
set.
pub async fn list_processed_findings_without_semantic_links( &self, ) -> Result<Vec<i32>>
pub async fn clear_finding_link_progress(&self) -> Result<(u64, u64)>
Sourcepub async fn migrate_link_strength_columns(&self) -> Result<()>
pub async fn migrate_link_strength_columns(&self) -> Result<()>
Idempotent migration: bring semantic_finding_link up to the
current schema by adding the strength and evidence columns
(introduced with the Low/Medium/High LinkStrength rollout) if
they aren’t already present. SQLite-only — every existing
historical KG lives in SQLite, and ALTER TABLE ... ADD COLUMN
is the cheapest way to bolt the new columns onto pre-existing
tables without a full data migration.
Safe to call from any DB lifecycle point: skips entirely on
non-SQLite backends or when both columns already exist. New DBs
created via init() get the columns directly through
create_tables, so this method is a no-op for them.
pub async fn validate_db(&self, repair: bool) -> Result<DbValidationReport>
Sourcepub async fn write_project_completed(
&self,
name: &str,
platform_id: Option<&str>,
categories: &[DeFiCategory],
semantic_merge_results: &[MergeResult],
finding_merge_results: &[FindingMergeResult],
in_project_links: &InProjectLinks,
) -> Result<()>
pub async fn write_project_completed( &self, name: &str, platform_id: Option<&str>, categories: &[DeFiCategory], semantic_merge_results: &[MergeResult], finding_merge_results: &[FindingMergeResult], in_project_links: &InProjectLinks, ) -> Result<()>
Atomically write a completed project with its categories, semantic nodes,
functions, and merge decisions.
Commit one project’s full merge output to the historical KG.
Begins its own transaction, calls
Self::write_project_completed_txn, commits, and discards
the new-canonical id list. Use this when the caller doesn’t
need to compose additional writes inside the same
transaction; bulk learn paths (learn moves / learn c4 /
learn projects) go through here because they don’t run
retro-link and therefore don’t need to enqueue
pending_semantic.
Sourcepub async fn write_project_completed_txn(
&self,
conn: &DatabaseTransaction,
name: &str,
platform_id: Option<&str>,
categories: &[DeFiCategory],
semantic_merge_results: &[MergeResult],
finding_merge_results: &[FindingMergeResult],
in_project_links: &InProjectLinks,
) -> Result<Vec<i32>>
pub async fn write_project_completed_txn( &self, conn: &DatabaseTransaction, name: &str, platform_id: Option<&str>, categories: &[DeFiCategory], semantic_merge_results: &[MergeResult], finding_merge_results: &[FindingMergeResult], in_project_links: &InProjectLinks, ) -> Result<Vec<i32>>
Transaction-scoped variant of
Self::write_project_completed. Writes every row this
project contributes (project / project_platform /
project_category / semantic_node / semantic_function /
semantic_merge / project_semantic / audit_finding /
project_finding / audit_finding_category / finding_merge /
in-project semantic_finding_link) into the supplied
transaction.
Does NOT touch pending_semantic — that side of the
“retro-link work queue” is a separate concern and only
workflow learn (the incremental flow) calls
Self::enqueue_pending_canonical_semantics_txn alongside
this. See crates/knowdit/src/cmd/learn/retro_link.rs for
the responsibility table.
Returns the canonical semantic ids this project newly
introduced (i.e. MergeAction::New entries from the
supplied merge results). The caller is responsible for
passing them to
Self::enqueue_pending_canonical_semantics_txn if their
flow runs retro-link.
Sourcepub async fn enqueue_pending_canonical_semantics_txn(
&self,
conn: &DatabaseTransaction,
canonical_ids: &[i32],
) -> Result<usize>
pub async fn enqueue_pending_canonical_semantics_txn( &self, conn: &DatabaseTransaction, canonical_ids: &[i32], ) -> Result<usize>
Append a list of canonical semantic ids to the
pending_semantic retro-link queue, deduping per-id against
what’s already enqueued. Called by workflow learn right
after Self::write_project_completed_txn inside the SAME
transaction so a kill between project commit and queue
enqueue rolls both writes back.
Bulk learn paths (learn moves / learn c4 /
learn projects) must NOT call this — they never run
retro-link, so populating the queue would leave dead rows
the validator surfaces as a partial-state issue.
Returns the number of rows actually inserted (i.e. how many of the supplied ids were not already queued).
Sourcepub async fn load_knowledge_graph(&self) -> Result<KnowledgeGraph>
pub async fn load_knowledge_graph(&self) -> Result<KnowledgeGraph>
Load the full knowledge graph from the database into memory.
Trait Implementations§
Source§impl Clone for HistoricalDatabase
impl Clone for HistoricalDatabase
Source§fn clone(&self) -> HistoricalDatabase
fn clone(&self) -> HistoricalDatabase
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for HistoricalDatabase
impl !UnwindSafe for HistoricalDatabase
impl Freeze for HistoricalDatabase
impl Send for HistoricalDatabase
impl Sync for HistoricalDatabase
impl Unpin for HistoricalDatabase
impl UnsafeUnpin for HistoricalDatabase
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read moreSource§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
Source§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
Source§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
Source§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);