pub struct SqliteIndex { /* private fields */ }Expand description
A SQLite-backed package index using the thunderstore API.
Stores package data in a local SQLite database with WAL journal mode for concurrent reads.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let client = Client::new();
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(client, db).unwrap();Implementations§
Source§impl SqliteIndex
impl SqliteIndex
Sourcepub fn connect(client: Client, db: Connection) -> Result<Self>
pub fn connect(client: Client, db: Connection) -> Result<Self>
Creates a new SQLite index from an existing connection and initialises the schema.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();Sourcepub fn open(client: Client, db_path: impl AsRef<Path>) -> Result<Self>
pub fn open(client: Client, db_path: impl AsRef<Path>) -> Result<Self>
Opens a SQLite database file and initialises the schema.
Enables WAL journal mode for better concurrent read performance.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let index = SqliteIndex::open(Client::new(), "./thunderstore.db").unwrap();Sourcepub fn community_metadata(
&self,
community: impl AsRef<str>,
) -> Result<Option<CommunityMetadata>>
pub fn community_metadata( &self, community: impl AsRef<str>, ) -> Result<Option<CommunityMetadata>>
Returns metadata about a community, including the last update time.
Returns None if the community has not been indexed yet.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();
let meta = index.community_metadata("rounds").unwrap();
assert!(meta.is_none());Sourcepub async fn update(&self, community: impl AsRef<str>) -> Result<()>
pub async fn update(&self, community: impl AsRef<str>) -> Result<()>
Fetches and stores the package index for a thunderstore community.
Inserts or replaces all packages for the given community and records the update timestamp.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
index.update("lethal-company").await.unwrap();
});Sourcepub fn version_info(&self, id: &PackageId) -> Result<Option<Vec<VersionInfo>>>
pub fn version_info(&self, id: &PackageId) -> Result<Option<Vec<VersionInfo>>>
Returns version information for a package, if found.
§Examples
use loadsmith_core::PackageId;
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();
let versions = index.version_info(&PackageId::new("Author-Pkg")).unwrap();Sourcepub fn resolve(&self, ref_: &PackageRef) -> Result<Option<ResolvedVersion>>
pub fn resolve(&self, ref_: &PackageRef) -> Result<Option<ResolvedVersion>>
Resolves a package reference to download URL, file size, and dependencies.
§Examples
use loadsmith_core::{PackageId, PackageRef, Version};
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();
let resolved = index
.resolve(&PackageRef::new(
PackageId::new("Author-Pkg"),
Version::new(1, 0, 0),
))
.unwrap();Sourcepub fn search_packages(
&self,
query: &str,
community: Option<&str>,
) -> Result<Vec<PackageId>>
pub fn search_packages( &self, query: &str, community: Option<&str>, ) -> Result<Vec<PackageId>>
Searches for packages by name, optionally scoped to a community.
Results are ordered by pinned status, rating score, and total downloads.
§Examples
use loadsmith_thunderstore::sqlite::SqliteIndex;
use thunderstore::Client;
let db = rusqlite::Connection::open_in_memory().unwrap();
let index = SqliteIndex::connect(Client::new(), db).unwrap();
let results = index.search_packages("BepInEx", Some("rounds")).unwrap();Trait Implementations§
Source§impl Clone for SqliteIndex
impl Clone for SqliteIndex
Source§fn clone(&self) -> SqliteIndex
fn clone(&self) -> SqliteIndex
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more