diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e2f26a7 --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +.DEFAULT_GOAL := check + +# Run the full local check suite — same order as CI would. +check: fmt-check clippy test + @echo "✅ All checks passed" + +# Apply rustfmt to all files. +fmt: + cargo fmt + +# Check formatting without modifying files (CI-safe). +fmt-check: + cargo fmt --check + +# Run Clippy and treat warnings as errors. +clippy: + cargo clippy -- -D warnings + +# Run the test suite. +test: + cargo test + +# Apply fmt + clippy auto-fixes in one shot. +fix: + cargo fmt + cargo clippy --fix --allow-dirty --allow-staged + +.PHONY: check fmt fmt-check clippy test fix diff --git a/src/activities/follow.rs b/src/activities/follow.rs index 08793a0..6573a8f 100644 --- a/src/activities/follow.rs +++ b/src/activities/follow.rs @@ -55,10 +55,10 @@ impl Activity for FollowActivity { .ok() .flatten() .is_some() - { - tracing::debug!(target = %target_url, "accepting follow for migrated actor URL"); - return Ok(()); - } + { + tracing::debug!(target = %target_url, "accepting follow for migrated actor URL"); + return Ok(()); + } Err(Error::bad_request(anyhow::anyhow!( "follow target is not a local actor" ))) @@ -74,10 +74,10 @@ impl Activity for FollowActivity { .blocklist_repo .is_actor_blocked(target_user_id, self.actor.inner().as_str()) .await? - { - tracing::info!(actor = %self.actor.inner(), "ignoring follow from blocked actor"); - return Ok(()); - } + { + tracing::info!(actor = %self.actor.inner(), "ignoring follow from blocked actor"); + return Ok(()); + } let _follower = self.actor.dereference(data).await?; let local_actor = self.object.dereference(data).await?; data.follow_repo diff --git a/src/tests/integration.rs b/src/tests/integration.rs index 5711bee..5e0da1c 100644 --- a/src/tests/integration.rs +++ b/src/tests/integration.rs @@ -14,7 +14,7 @@ use crate::repository::{ ActivityRepository, ActorRepository, BlockedDomain, BlocklistRepository, FollowRepository, Follower, FollowerStatus, FollowingStatus, RemoteActor, }; -use crate::user::{ApActorType, ApProfileField, ApUser, ApUserRepository}; +use crate::user::{ApActorType, ApUser, ApUserRepository}; // ── ActivityRepository ──────────────────────────────────────────────────────── diff --git a/src/user.rs b/src/user.rs index 8551221..0ac986e 100644 --- a/src/user.rs +++ b/src/user.rs @@ -25,8 +25,7 @@ pub enum ApVisibility { } /// Actor type for AP serialization. Defaults to `Person`. -#[derive(Debug, Clone, Serialize, Deserialize)] -#[derive(Default)] +#[derive(Debug, Clone, Serialize, Deserialize, Default)] pub enum ApActorType { #[default] Person, @@ -36,7 +35,6 @@ pub enum ApActorType { Group, } - /// Resolved actor data returned by [`crate::service::ActivityPubService::lookup_actor_by_handle`]. /// Fetched via a signed HTTP request so strict instances (e.g. Threads) return full data. #[derive(Debug, Clone)]