explicit first and last, and no field selectors

This commit is contained in:
me 2024-12-17 10:46:59 +02:00
parent a0bdd57e83
commit 931e075067
3 changed files with 14 additions and 5 deletions

View file

@ -53,6 +53,7 @@ library
DeriveAnyClass
DerivingStrategies
DuplicateRecordFields
NoFieldSelectors
executable fedi
import: warnings

View file

@ -1,6 +1,5 @@
module Fedi.Activity where
import Data.Maybe (listToMaybe)
import Data.Aeson qualified as A
import Data.Text qualified as T
import Fedi.Types
@ -14,6 +13,10 @@ data Activity
, object :: Object
}
activityUrl :: Activity -> ActivityUrl
activityUrl = \case
create@Create{} -> create.id
type ActivityUrl = Url
data Object
@ -52,6 +55,8 @@ data Collection order a
= Collection
{ summary :: String
, items :: [a]
, first :: Maybe Url
, last :: Maybe Url
}
instance A.ToJSON Note where
@ -95,8 +100,8 @@ instance A.ToJSON a => A.ToJSON (Collection Ordered a) where
, "summary" A..= collection.summary
, "totalItems" A..= length collection.items
, "orderedItems" A..= collection.items
, "first" A..= listToMaybe (take 1 collection.items)
, "last" A..= listToMaybe (take 1 $ reverse collection.items)
, "first" A..= collection.first
, "last" A..= collection.last
]
instance A.ToJSON a => A.ToJSON (Collection Unordered a) where
@ -109,8 +114,8 @@ instance A.ToJSON a => A.ToJSON (Collection Unordered a) where
, "summary" A..= collection.summary
, "totalItems" A..= length collection.items
, "items" A..= collection.items
, "first" A..= listToMaybe (take 1 collection.items)
, "last" A..= listToMaybe (take 1 $ reverse collection.items)
, "first" A..= collection.first
, "last" A..= collection.last
]
instance A.ToJSON a => A.ToJSON (OrderedCollectionPage a) where

View file

@ -1,5 +1,6 @@
module Fedi.Routes where
import Data.Maybe (listToMaybe)
import Web.Twain qualified as Twain
import Web.Twain.Types qualified as Twain
import Data.String (fromString)
@ -91,6 +92,8 @@ handleOutbox details items = do
Collection
{ summary = details.username <> "'s notes"
, items = items
, first = Just $ outboxUrl <> "?page=true"
, last = Nothing
}
in A.encode content
Twain.send $ jsonLD response