Skip to main content

HistoricalDatabase

Struct HistoricalDatabase 

Source
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

Source

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.

Source

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.

Source

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).

Source

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.

Source

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.

Source

pub async fn export_sql_snapshot(&self) -> Result<String>

Source

pub async fn export_json_snapshot(&self) -> Result<String>

Source

pub async fn import_sql_snapshot(&self, sql: &str) -> Result<usize>

Source

pub async fn import_json_snapshot(&self, json: &str) -> Result<usize>

Source

pub async fn import_knowledge_graph( &self, graph: &KnowledgeGraph, ) -> Result<usize>

Source

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.

Source

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.

Source

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”).

Source

pub async fn get_project_by_name(&self, name: &str) -> Result<Option<Model>>

Source

pub async fn get_project_by_id(&self, id: i32) -> Result<Option<Model>>

Source

pub async fn is_project_completed(&self, platform_id: &str) -> Result<bool>

Check if a project with this platform_id is already completed.

Source

pub async fn get_project_platform( &self, project_id: i32, ) -> Result<Option<Model>>

Get the platform info for a project.

Source

pub async fn set_platform_id( &self, project_id: i32, platform_id: &str, ) -> Result<()>

Set or update the platform ID for a project.

Source

pub async fn list_completed_projects( &self, ) -> Result<Vec<(Model, Option<Model>)>>

Source

pub async fn list_semantics_by_project( &self, project_id: i32, ) -> Result<Vec<(Model, Vec<Model>)>>

Source

pub async fn search_semantics( &self, query: &str, ) -> Result<Vec<(Model, String)>>

Source

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.

Source

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.

Source

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.

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.

Source

pub async fn load_semantic_scope_seed(&self) -> Result<Vec<SemanticScopeSeed>>

Source

pub async fn load_vulnerability_scope_seed( &self, ) -> Result<Vec<VulnerabilityScopeSeed>>

Source

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.

Source

pub async fn existing_findings_for_categories( &self, categories: &[VulnerabilityCategory], ) -> Result<Vec<(Model, Model)>>

Source

pub async fn list_pending_findings_for_linking( &self, ) -> Result<Vec<PendingFindingForLinking>>

Source

pub async fn list_findings_for_linking( &self, include_unlinked: bool, ) -> Result<Vec<PendingFindingForLinking>>

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.

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).

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.

Source

pub async fn list_pending_canonical_semantics(&self) -> Result<Vec<Model>>

Currently-queued canonical semantics waiting for retro-link consideration.

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.

Source

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.

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.

Source

pub async fn validate_db(&self, repair: bool) -> Result<DbValidationReport>

Source

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.

Source

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.

Source

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).

Source

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

Source§

fn clone(&self) -> HistoricalDatabase

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HistoricalDatabase

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, R> CollectAndApply<T, R> for T

Source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

Source§

type Output = R

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> Paint for T
where T: ?Sized,

Source§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

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);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more