KOReader data parsing
This commit is contained in:
51
lib/KOReader.hs
Normal file
51
lib/KOReader.hs
Normal file
@@ -0,0 +1,51 @@
|
||||
-- | Module to parse KOReader hightlight file
|
||||
{-# LANGUAGE DerivingVia #-}
|
||||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module KOReader where
|
||||
|
||||
import Deriving.Aeson
|
||||
import Data.Aeson
|
||||
import Data.Text
|
||||
|
||||
showT :: Show a => a -> Text
|
||||
showT = pack . show
|
||||
|
||||
newtype KoPage = KoPage Text
|
||||
deriving (Show, Eq, Generic)
|
||||
|
||||
instance FromJSON KoPage where
|
||||
parseJSON (Number s) = pure (KoPage $ showT $ round s)
|
||||
parseJSON (String s) = pure (KoPage (showT s))
|
||||
parseJSON _ = undefined
|
||||
|
||||
instance ToJSON KoPage where
|
||||
toJSON (KoPage a) = toJSON a
|
||||
|
||||
data KoHighlight = KoHighlight { khlDocuments :: [KoDocument]
|
||||
, khlVersion :: Text
|
||||
-- TODO: UNIX time
|
||||
, khlCreatedOn :: Integer }
|
||||
deriving (Show, Eq, Generic)
|
||||
deriving (FromJSON, ToJSON)
|
||||
via CustomJSON '[OmitNothingFields, FieldLabelModifier '[StripPrefix "khl", CamelToSnake]] KoHighlight
|
||||
|
||||
data KoDocument = KoDocument { kodTitle :: Text
|
||||
, kodAuthor :: Maybe Text
|
||||
, kodFile :: Maybe Text
|
||||
, kodEntries :: [KoEntry] }
|
||||
deriving (Show, Eq, Generic)
|
||||
deriving (FromJSON, ToJSON)
|
||||
via CustomJSON '[OmitNothingFields, FieldLabelModifier '[StripPrefix "kod", CamelToSnake]] KoDocument
|
||||
|
||||
data KoEntry = KoEntry { koeChapter :: Maybe Text
|
||||
, koePage :: KoPage
|
||||
-- TODO: unix time
|
||||
, koeTime :: Maybe Integer
|
||||
, koeSort :: Maybe Text
|
||||
, koeDrawer :: Maybe Text
|
||||
, koeText :: Text}
|
||||
deriving (Show, Eq, Generic)
|
||||
deriving (FromJSON, ToJSON)
|
||||
via CustomJSON '[OmitNothingFields, FieldLabelModifier '[StripPrefix "koe", CamelToSnake]] KoEntry
|
Reference in New Issue
Block a user