ap-relay 0.3.129

A simple activitypub relay
use crate::{
    config::{Config, UrlKind},
    error::Error,
};

use super::{
    CollectionResponse, Either, OrderedCollectionPageResponse, OrderedCollectionResponse, PageQuery,
};

use activitystreams::iri;
use actix_web::web::{Data, Json, Query};

pub(crate) async fn route(
    config: Data<Config>,
    page_query: Option<Query<PageQuery>>,
) -> Result<Json<CollectionResponse>, Error> {
    let outbox = config.generate_url(UrlKind::Outbox);

    if let Some(Query(PageQuery { page })) = page_query {
        let outbox_page = iri!(format!("{outbox}?page={page}"));

        Ok(Json(Either::Right(OrderedCollectionPageResponse {
            context: Default::default(),
            id: outbox_page,
            _type: Default::default(),
            total_items: 0,
            part_of: outbox,
            ordered_items: vec![],
        })))
    } else {
        let outbox_page = iri!(format!("{outbox}?page=1"));

        Ok(Json(Either::Left(OrderedCollectionResponse {
            context: Default::default(),
            id: outbox,
            _type: Default::default(),
            total_items: 0,
            first: outbox_page,
        })))
    }
}