Versionbump: Reordered src/Model/Types/Csv.hs so it compiles again.
This commit is contained in:
parent
861fa9d4a5
commit
ade5ae89d0
@ -1,4 +1,4 @@
|
|||||||
-- SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
-- SPDX-FileCopyrightText: 2024 Stephan Barth <stephan.barth@uniworx.de>, 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Sarah Vaupel <sarah.vaupel@ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>
|
||||||
--
|
--
|
||||||
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
@ -39,6 +39,29 @@ import Utils.Lens.TH
|
|||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Universe
|
import Data.Universe
|
||||||
|
|
||||||
|
data CsvFormatOptions
|
||||||
|
= CsvFormatOptions
|
||||||
|
{ csvDelimiter :: Char
|
||||||
|
, csvUseCrLf :: Bool
|
||||||
|
, csvQuoting :: Csv.Quoting
|
||||||
|
, csvEncoding :: DynEncoding
|
||||||
|
, csvIncludeHeader :: Bool
|
||||||
|
}
|
||||||
|
| CsvXlsxFormatOptions
|
||||||
|
deriving (Eq, Ord, Read, Show, Generic)
|
||||||
|
deriving anyclass (Hashable, NFData)
|
||||||
|
|
||||||
|
data CsvPreset = CsvPresetRFC
|
||||||
|
| CsvPresetXlsx
|
||||||
|
| CsvPresetExcel
|
||||||
|
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)
|
||||||
|
instance Universe CsvPreset
|
||||||
|
instance Finite CsvPreset
|
||||||
|
|
||||||
|
instance Default CsvFormatOptions where
|
||||||
|
def = csvPreset # CsvPresetRFC -- DO NOT CHANGE!
|
||||||
|
-- Changing the default to CsvPresetXlsx will cause internal server errors due to partial record selectors failing, like `csvIncludeHeader`
|
||||||
|
|
||||||
|
|
||||||
deriving stock instance Generic Quoting
|
deriving stock instance Generic Quoting
|
||||||
deriving stock instance Ord Quoting
|
deriving stock instance Ord Quoting
|
||||||
@ -53,47 +76,14 @@ nullaryPathPiece ''Quoting $ \q -> if
|
|||||||
| q == "QuoteNone" -> "never"
|
| q == "QuoteNone" -> "never"
|
||||||
| otherwise -> camelToPathPiece' 1 q
|
| otherwise -> camelToPathPiece' 1 q
|
||||||
|
|
||||||
data CsvOptions
|
|
||||||
= CsvOptions
|
|
||||||
{ csvFormat :: CsvFormatOptions
|
|
||||||
, csvTimestamp :: Bool
|
|
||||||
, csvExportLabel :: Maybe Text
|
|
||||||
}
|
|
||||||
deriving (Eq, Ord, Read, Show, Generic)
|
|
||||||
deriving anyclass (Hashable, NFData)
|
|
||||||
|
|
||||||
data CsvFormatOptions
|
data CsvFormat = FormatCsv | FormatXlsx
|
||||||
= CsvFormatOptions
|
|
||||||
{ csvDelimiter :: Char
|
|
||||||
, csvUseCrLf :: Bool
|
|
||||||
, csvQuoting :: Csv.Quoting
|
|
||||||
, csvEncoding :: DynEncoding
|
|
||||||
, csvIncludeHeader :: Bool
|
|
||||||
}
|
|
||||||
| CsvXlsxFormatOptions
|
|
||||||
deriving (Eq, Ord, Read, Show, Generic)
|
|
||||||
deriving anyclass (Hashable, NFData)
|
|
||||||
|
|
||||||
makeLenses_ ''CsvOptions
|
|
||||||
makeLenses_ ''CsvFormatOptions
|
|
||||||
|
|
||||||
instance Default CsvOptions where
|
|
||||||
def = CsvOptions
|
|
||||||
{ csvFormat = def
|
|
||||||
, csvTimestamp = False
|
|
||||||
, csvExportLabel = Nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
instance Default CsvFormatOptions where
|
|
||||||
def = csvPreset # CsvPresetRFC -- DO NOT CHANGE!
|
|
||||||
-- Changing the default to CsvPresetXlsx will cause internal server errors due to partial record selectors failing, like `csvIncludeHeader`
|
|
||||||
|
|
||||||
data CsvPreset = CsvPresetRFC
|
|
||||||
| CsvPresetXlsx
|
|
||||||
| CsvPresetExcel
|
|
||||||
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)
|
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)
|
||||||
instance Universe CsvPreset
|
deriving anyclass (Universe, Finite)
|
||||||
instance Finite CsvPreset
|
|
||||||
|
nullaryPathPiece ''CsvFormat $ camelToPathPiece' 1
|
||||||
|
pathPieceJSON ''CsvFormat
|
||||||
|
makePrisms ''CsvFormat
|
||||||
|
|
||||||
csvPreset :: Prism' CsvFormatOptions CsvPreset
|
csvPreset :: Prism' CsvFormatOptions CsvPreset
|
||||||
csvPreset = prism' fromPreset toPreset
|
csvPreset = prism' fromPreset toPreset
|
||||||
@ -120,43 +110,6 @@ csvPreset = prism' fromPreset toPreset
|
|||||||
[p] -> Just p
|
[p] -> Just p
|
||||||
_other -> Nothing
|
_other -> Nothing
|
||||||
|
|
||||||
_CsvEncodeOptions :: Prism' CsvFormatOptions Csv.EncodeOptions
|
|
||||||
_CsvEncodeOptions = prism' fromEncode toEncode
|
|
||||||
where
|
|
||||||
toEncode CsvFormatOptions{..} = Just $ Csv.defaultEncodeOptions
|
|
||||||
{ Csv.encDelimiter = fromIntegral $ fromEnum csvDelimiter
|
|
||||||
, Csv.encUseCrLf = csvUseCrLf
|
|
||||||
, Csv.encQuoting = csvQuoting
|
|
||||||
, Csv.encIncludeHeader = csvIncludeHeader
|
|
||||||
}
|
|
||||||
toEncode CsvXlsxFormatOptions{} = Nothing
|
|
||||||
fromEncode encOpts = def
|
|
||||||
{ csvDelimiter = toEnum . fromIntegral $ Csv.encDelimiter encOpts
|
|
||||||
, csvUseCrLf = Csv.encUseCrLf encOpts
|
|
||||||
, csvQuoting = Csv.encQuoting encOpts
|
|
||||||
}
|
|
||||||
|
|
||||||
instance ToJSON CsvOptions where
|
|
||||||
toJSON CsvOptions{..} = JSON.object
|
|
||||||
[ "format" JSON..= csvFormat
|
|
||||||
, "timestamp" JSON..= csvTimestamp
|
|
||||||
, "export-label" JSON..= csvExportLabel
|
|
||||||
]
|
|
||||||
|
|
||||||
instance FromJSON CsvOptions where
|
|
||||||
parseJSON = JSON.withObject "CsvOptions" $ \o -> do
|
|
||||||
csvFormat <- o JSON..:? "format" JSON..!= csvFormat def
|
|
||||||
csvTimestamp <- o JSON..:? "timestamp" JSON..!= csvTimestamp def
|
|
||||||
csvExportLabel <- o JSON..:? "export-label" JSON..!= csvExportLabel def
|
|
||||||
return CsvOptions{..}
|
|
||||||
|
|
||||||
data CsvFormat = FormatCsv | FormatXlsx
|
|
||||||
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)
|
|
||||||
deriving anyclass (Universe, Finite)
|
|
||||||
|
|
||||||
nullaryPathPiece ''CsvFormat $ camelToPathPiece' 1
|
|
||||||
pathPieceJSON ''CsvFormat
|
|
||||||
makePrisms ''CsvFormat
|
|
||||||
|
|
||||||
_CsvFormat :: forall r. Getting r CsvFormatOptions CsvFormat
|
_CsvFormat :: forall r. Getting r CsvFormatOptions CsvFormat
|
||||||
_CsvFormat = to $ \case
|
_CsvFormat = to $ \case
|
||||||
@ -199,6 +152,57 @@ instance FromJSON CsvFormatOptions where
|
|||||||
return CsvFormatOptions{..}
|
return CsvFormatOptions{..}
|
||||||
FormatXlsx -> return CsvXlsxFormatOptions
|
FormatXlsx -> return CsvXlsxFormatOptions
|
||||||
|
|
||||||
|
|
||||||
|
data CsvOptions
|
||||||
|
= CsvOptions
|
||||||
|
{ csvFormat :: CsvFormatOptions
|
||||||
|
, csvTimestamp :: Bool
|
||||||
|
, csvExportLabel :: Maybe Text
|
||||||
|
}
|
||||||
|
deriving (Eq, Ord, Read, Show, Generic)
|
||||||
|
deriving anyclass (Hashable, NFData)
|
||||||
|
|
||||||
|
makeLenses_ ''CsvOptions
|
||||||
|
makeLenses_ ''CsvFormatOptions
|
||||||
|
|
||||||
|
instance Default CsvOptions where
|
||||||
|
def = CsvOptions
|
||||||
|
{ csvFormat = def
|
||||||
|
, csvTimestamp = False
|
||||||
|
, csvExportLabel = Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_CsvEncodeOptions :: Prism' CsvFormatOptions Csv.EncodeOptions
|
||||||
|
_CsvEncodeOptions = prism' fromEncode toEncode
|
||||||
|
where
|
||||||
|
toEncode CsvFormatOptions{..} = Just $ Csv.defaultEncodeOptions
|
||||||
|
{ Csv.encDelimiter = fromIntegral $ fromEnum csvDelimiter
|
||||||
|
, Csv.encUseCrLf = csvUseCrLf
|
||||||
|
, Csv.encQuoting = csvQuoting
|
||||||
|
, Csv.encIncludeHeader = csvIncludeHeader
|
||||||
|
}
|
||||||
|
toEncode CsvXlsxFormatOptions{} = Nothing
|
||||||
|
fromEncode encOpts = def
|
||||||
|
{ csvDelimiter = toEnum . fromIntegral $ Csv.encDelimiter encOpts
|
||||||
|
, csvUseCrLf = Csv.encUseCrLf encOpts
|
||||||
|
, csvQuoting = Csv.encQuoting encOpts
|
||||||
|
}
|
||||||
|
|
||||||
|
instance ToJSON CsvOptions where
|
||||||
|
toJSON CsvOptions{..} = JSON.object
|
||||||
|
[ "format" JSON..= csvFormat
|
||||||
|
, "timestamp" JSON..= csvTimestamp
|
||||||
|
, "export-label" JSON..= csvExportLabel
|
||||||
|
]
|
||||||
|
|
||||||
|
instance FromJSON CsvOptions where
|
||||||
|
parseJSON = JSON.withObject "CsvOptions" $ \o -> do
|
||||||
|
csvFormat <- o JSON..:? "format" JSON..!= csvFormat def
|
||||||
|
csvTimestamp <- o JSON..:? "timestamp" JSON..!= csvTimestamp def
|
||||||
|
csvExportLabel <- o JSON..:? "export-label" JSON..!= csvExportLabel def
|
||||||
|
return CsvOptions{..}
|
||||||
|
|
||||||
derivePersistFieldJSON ''CsvOptions
|
derivePersistFieldJSON ''CsvOptions
|
||||||
|
|
||||||
nullaryPathPiece ''CsvPreset $ camelToPathPiece' 2
|
nullaryPathPiece ''CsvPreset $ camelToPathPiece' 2
|
||||||
|
|||||||
Reference in New Issue
Block a user