From 1841bda54f2f9fc790acb83ab9ddb3222e856462 Mon Sep 17 00:00:00 2001 From: phil Date: Mon, 6 Oct 2025 12:24:27 -0400 Subject: [PATCH] extact more stuff --- src/main.rs | 364 ++++++++++++++++++++++++++-------------------------- 1 file changed, 183 insertions(+), 181 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7766640..4aa1251 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,98 +52,11 @@ struct Args { dry_run: bool, } -async fn post( - client: &BasicClient, - identifier: &AtIdentifier<'_>, - repo_name: &str, - repo_url: &str, - title: &str, - repo_issues_url: &str, -) -> Result<()> { - let message = format!( - r#"good-first-issue added for {repo_name}: - -> {title}"# - ); - - let repo_feature = serde_json::json!({ - "$type": "app.bsky.richtext.facet#link", - "uri": repo_url, - }); - let repo_facet = Facet { - features: vec![Data::from_json(&repo_feature)?], - index: ByteSlice { - byte_start: 27, - byte_end: 29 + repo_name.len() as i64, - extra_data: Default::default(), - }, - extra_data: Default::default(), - }; - - let title_starts_at = (29 + repo_name.len() + 5) as i64; - - let repo_issues_feature = serde_json::json!({ - "$type": "app.bsky.richtext.facet#link", - "uri": repo_issues_url, - }); - let issues_facet = Facet { - features: vec![Data::from_json(&repo_issues_feature)?], - index: ByteSlice { - byte_start: title_starts_at, - byte_end: title_starts_at + title.len() as i64, - extra_data: Default::default(), - }, - extra_data: Default::default(), - }; - - // Make a post - let post = Post { - created_at: Datetime::now(), - langs: Some(vec![Language::new("en")?]), - text: message.into(), - facets: Some(vec![repo_facet, issues_facet]), - embed: Default::default(), - entities: Default::default(), - labels: Default::default(), - reply: Default::default(), - tags: Default::default(), - extra_data: Default::default(), - }; - - let json = serde_json::to_value(post)?; - let data = Data::from_json(&json)?; - - log::info!("\nposting..."); - client - .send( - CreateRecord::new() - .repo(identifier.clone()) - .collection(Post::nsid()) - .record(data) - .build(), - ) - .await? - .into_output()?; - - Ok(()) -} - -fn event_to_create_label Deserialize<'a>>(event: JetstreamEvent) -> Result<(T, Cursor)> { - if event.kind != EventKind::Commit { - return Err("not a commit".into()); - } - let commit = event.commit.ok_or("commit event missing commit data")?; - if commit.operation != CommitOp::Create { - return Err("not a create event".into()); - } - - let raw = commit.record.ok_or("commit missing record")?; - - // todo: delete post if label is removed - // delete sample: at://did:plc:hdhoaan3xa3jiuq4fg4mefid/sh.tangled.label.op/3m2jvx4c6wf22 - // tldr: has a "delete" array just like "add" on the same op collection - let t = serde_json::from_str(raw.get())?; - Ok((t, event.cursor)) +struct IssueDetails { + repo_full_name: String, + repo_url: String, + title: String, + issues_url: String, } /// com.bad-example.identity.resolveMiniDoc bit we care about @@ -221,6 +134,162 @@ async fn get_handle(client: &reqwest::Client, identifier: &str) -> Result