wip: Custom mirroring tangled knot written in Rust
rust tangled mirror knot
1

Configure Feed

Select the types of activity you want to include in your feed.

misc: move routes

Clément (Jun 8, 2026, 11:30 AM +0200) c211a975 b16da1a3

+75 -66
+1 -1
crates/knotty-knot/src/main.rs
··· 1 1 mod error; 2 2 mod keypair; 3 3 mod router; 4 + mod routes; 4 5 mod state; 5 - mod xrpc; 6 6 7 7 use std::path::PathBuf; 8 8
+1 -1
crates/knotty-knot/src/router.rs
··· 6 6 7 7 pub fn router(state: KnotState) -> Router { 8 8 let did_doc = state.did_doc.clone(); 9 - crate::xrpc::router() 9 + crate::routes::router() 10 10 .with_state(state) 11 11 .merge(did_web::did_web_router(did_doc)) 12 12 .layer(TraceLayer::new_for_http())
+9
crates/knotty-knot/src/routes/mod.rs
··· 1 + use axum::Router; 2 + 3 + use crate::state::KnotState; 4 + 5 + mod xrpc; 6 + 7 + pub fn router() -> Router<KnotState> { 8 + Router::new().merge(xrpc::router()) 9 + }
-18
crates/knotty-knot/src/xrpc/create_repo.rs
··· 1 - use axum::{extract::State, http::StatusCode}; 2 - use jacquard::api::sh_tangled::repo::create::CreateRequest; 3 - use jacquard_axum::{ExtractXrpc, service_auth::ExtractServiceAuth}; 4 - 5 - use crate::{error::KnotError, state::KnotState}; 6 - 7 - #[axum::debug_handler(state = KnotState)] 8 - pub async fn handler( 9 - State(_state): State<KnotState>, 10 - ExtractServiceAuth(_auth): ExtractServiceAuth, 11 - ExtractXrpc(_req): ExtractXrpc<CreateRequest>, 12 - ) -> Result<(), KnotError> { 13 - Err(KnotError::new( 14 - StatusCode::UNAUTHORIZED, 15 - "cannot create mirrors through tangled directly", 16 - None, 17 - )) 18 - }
-14
crates/knotty-knot/src/xrpc/delete_repo.rs
··· 1 - use axum::extract::State; 2 - use jacquard::api::sh_tangled::repo::delete::DeleteRequest; 3 - use jacquard_axum::{ExtractXrpc, service_auth::ExtractServiceAuth}; 4 - 5 - use crate::{error::KnotError, state::KnotState}; 6 - 7 - #[axum::debug_handler(state = KnotState)] 8 - pub async fn handler( 9 - State(_state): State<KnotState>, 10 - ExtractServiceAuth(_auth): ExtractServiceAuth, 11 - ExtractXrpc(_req): ExtractXrpc<DeleteRequest>, 12 - ) -> Result<(), KnotError> { 13 - Err(KnotError::not_implemented()) 14 - }
-18
crates/knotty-knot/src/xrpc/mod.rs
··· 1 - use axum::Router; 2 - use jacquard::api::sh_tangled::owner::OwnerRequest; 3 - use jacquard::api::sh_tangled::repo::create::CreateRequest; 4 - use jacquard::api::sh_tangled::repo::delete::DeleteRequest; 5 - use jacquard_axum::IntoRouter; 6 - 7 - use crate::state::KnotState; 8 - 9 - mod create_repo; 10 - mod delete_repo; 11 - mod owner; 12 - 13 - pub fn router() -> Router<KnotState> { 14 - Router::new() 15 - .merge(OwnerRequest::into_router(owner::handler)) 16 - .merge(CreateRequest::into_router(create_repo::handler)) 17 - .merge(DeleteRequest::into_router(delete_repo::handler)) 18 - }
-14
crates/knotty-knot/src/xrpc/owner.rs
··· 1 - use axum::{Json, extract::State}; 2 - use jacquard::api::sh_tangled::owner::OwnerOutput; 3 - 4 - use crate::{error::KnotError, state::KnotState}; 5 - 6 - #[axum::debug_handler(state = KnotState)] 7 - pub async fn handler( 8 - State(state): State<KnotState>, 9 - ) -> Result<Json<OwnerOutput<'static>>, KnotError> { 10 - Ok(Json(OwnerOutput { 11 - owner: state.owner, 12 - extra_data: Default::default(), 13 - })) 14 - }
+18
crates/knotty-knot/src/routes/xrpc/create_repo.rs
··· 1 + use axum::{extract::State, http::StatusCode}; 2 + use jacquard::api::sh_tangled::repo::create::CreateRequest; 3 + use jacquard_axum::{ExtractXrpc, service_auth::ExtractServiceAuth}; 4 + 5 + use crate::{error::KnotError, state::KnotState}; 6 + 7 + #[axum::debug_handler(state = KnotState)] 8 + pub async fn handler( 9 + State(_state): State<KnotState>, 10 + ExtractServiceAuth(_auth): ExtractServiceAuth, 11 + ExtractXrpc(_req): ExtractXrpc<CreateRequest>, 12 + ) -> Result<(), KnotError> { 13 + Err(KnotError::new( 14 + StatusCode::UNAUTHORIZED, 15 + "cannot create mirrors through tangled directly", 16 + None, 17 + )) 18 + }
+14
crates/knotty-knot/src/routes/xrpc/delete_repo.rs
··· 1 + use axum::extract::State; 2 + use jacquard::api::sh_tangled::repo::delete::DeleteRequest; 3 + use jacquard_axum::{ExtractXrpc, service_auth::ExtractServiceAuth}; 4 + 5 + use crate::{error::KnotError, state::KnotState}; 6 + 7 + #[axum::debug_handler(state = KnotState)] 8 + pub async fn handler( 9 + State(_state): State<KnotState>, 10 + ExtractServiceAuth(_auth): ExtractServiceAuth, 11 + ExtractXrpc(_req): ExtractXrpc<DeleteRequest>, 12 + ) -> Result<(), KnotError> { 13 + Err(KnotError::not_implemented()) 14 + }
+18
crates/knotty-knot/src/routes/xrpc/mod.rs
··· 1 + use axum::Router; 2 + use jacquard::api::sh_tangled::owner::OwnerRequest; 3 + use jacquard::api::sh_tangled::repo::create::CreateRequest; 4 + use jacquard::api::sh_tangled::repo::delete::DeleteRequest; 5 + use jacquard_axum::IntoRouter; 6 + 7 + use crate::state::KnotState; 8 + 9 + mod create_repo; 10 + mod delete_repo; 11 + mod owner; 12 + 13 + pub fn router() -> Router<KnotState> { 14 + Router::new() 15 + .merge(OwnerRequest::into_router(owner::handler)) 16 + .merge(CreateRequest::into_router(create_repo::handler)) 17 + .merge(DeleteRequest::into_router(delete_repo::handler)) 18 + }
+14
crates/knotty-knot/src/routes/xrpc/owner.rs
··· 1 + use axum::{Json, extract::State}; 2 + use jacquard::api::sh_tangled::owner::OwnerOutput; 3 + 4 + use crate::{error::KnotError, state::KnotState}; 5 + 6 + #[axum::debug_handler(state = KnotState)] 7 + pub async fn handler( 8 + State(state): State<KnotState>, 9 + ) -> Result<Json<OwnerOutput<'static>>, KnotError> { 10 + Ok(Json(OwnerOutput { 11 + owner: state.owner, 12 + extra_data: Default::default(), 13 + })) 14 + }