diff options
author | Cyborus <cyborus@cyborus.xyz> | 2024-08-05 19:40:49 +0200 |
---|---|---|
committer | Cyborus <cyborus@cyborus.xyz> | 2024-08-08 01:35:50 +0200 |
commit | 296ac0c8531ae98891cb532cba2d4cb8fd66698d (patch) | |
tree | 2f46aa0fbaf31a8371aa384dc1e8bd1a044cfecc /src/wiki.rs | |
parent | chore: wiki file (diff) | |
download | forgejo-cli-296ac0c8531ae98891cb532cba2d4cb8fd66698d.tar.xz forgejo-cli-296ac0c8531ae98891cb532cba2d4cb8fd66698d.zip |
feat: `wiki contents`
Diffstat (limited to '')
-rw-r--r-- | src/wiki.rs | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/src/wiki.rs b/src/wiki.rs index 91792ad..9812346 100644 --- a/src/wiki.rs +++ b/src/wiki.rs @@ -1,6 +1,11 @@ use clap::{Args, Subcommand}; +use eyre::OptionExt; +use forgejo_api::Forgejo; -use crate::repo::{RepoArg, RepoInfo}; +use crate::{ + repo::{RepoArg, RepoInfo, RepoName}, + SpecialRender, +}; #[derive(Args, Clone, Debug)] pub struct WikiCommand { @@ -12,7 +17,9 @@ pub struct WikiCommand { } #[derive(Subcommand, Clone, Debug)] -pub enum WikiSubcommand {} +pub enum WikiSubcommand { + Contents { repo: Option<RepoArg> }, +} impl WikiCommand { pub async fn run(self, keys: &mut crate::KeyInfo, host_name: Option<&str>) -> eyre::Result<()> { @@ -22,20 +29,44 @@ impl WikiCommand { let api = keys.get_api(repo.host_url()).await?; let repo = repo.name().ok_or_else(|| self.no_repo_error())?; - match self.command {} + match self.command { + Contents { repo: _ } => wiki_contents(&repo, &api).await?, + } + Ok(()) } fn repo(&self) -> Option<&RepoArg> { use WikiSubcommand::*; match &self.command { - _ => todo!(), + Contents { repo } => repo.as_ref(), } } fn no_repo_error(&self) -> eyre::Error { use WikiSubcommand::*; match &self.command { - _ => todo!(), + Contents { repo: _ } => eyre::eyre!("couldn't guess repo"), } } } + +async fn wiki_contents(repo: &RepoName, api: &Forgejo) -> eyre::Result<()> { + let SpecialRender { bullet, .. } = *crate::special_render(); + + let query = forgejo_api::structs::RepoGetWikiPagesQuery { + page: None, + limit: None, + }; + let pages = api + .repo_get_wiki_pages(repo.owner(), repo.name(), query) + .await?; + for page in pages { + let title = page + .title + .as_deref() + .ok_or_eyre("page does not have title")?; + println!("{bullet} {title}"); + } + + Ok(()) +} |