module Ecluse.Core.Osv.Ecosystem (
OsvEcosystem (..),
osvEcosystemFor,
osvEcosystemNamed,
) where
import Ecluse.Core.Ecosystem (Ecosystem (Npm, PyPI, RubyGems), ecosystemName, parseEcosystem)
data OsvEcosystem = OsvEcosystem
{ OsvEcosystem -> Text
osvExportDirectory :: Text
, OsvEcosystem -> Text
osvWireName :: Text
, OsvEcosystem -> Maybe Ecosystem
osvEcosystemTag :: Maybe Ecosystem
, OsvEcosystem -> Int
osvMaxAdvisoryFanOut :: Int
}
deriving stock (OsvEcosystem -> OsvEcosystem -> Bool
(OsvEcosystem -> OsvEcosystem -> Bool)
-> (OsvEcosystem -> OsvEcosystem -> Bool) -> Eq OsvEcosystem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OsvEcosystem -> OsvEcosystem -> Bool
== :: OsvEcosystem -> OsvEcosystem -> Bool
$c/= :: OsvEcosystem -> OsvEcosystem -> Bool
/= :: OsvEcosystem -> OsvEcosystem -> Bool
Eq, Int -> OsvEcosystem -> ShowS
[OsvEcosystem] -> ShowS
OsvEcosystem -> String
(Int -> OsvEcosystem -> ShowS)
-> (OsvEcosystem -> String)
-> ([OsvEcosystem] -> ShowS)
-> Show OsvEcosystem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OsvEcosystem -> ShowS
showsPrec :: Int -> OsvEcosystem -> ShowS
$cshow :: OsvEcosystem -> String
show :: OsvEcosystem -> String
$cshowList :: [OsvEcosystem] -> ShowS
showList :: [OsvEcosystem] -> ShowS
Show)
npmAdvisoryFanOut :: Int
npmAdvisoryFanOut :: Int
npmAdvisoryFanOut = Int
256
pypiAdvisoryFanOut :: Int
pypiAdvisoryFanOut :: Int
pypiAdvisoryFanOut = Int
4096
osvEcosystemFor :: Ecosystem -> OsvEcosystem
osvEcosystemFor :: Ecosystem -> OsvEcosystem
osvEcosystemFor Ecosystem
eco =
OsvEcosystem
{ osvExportDirectory :: Text
osvExportDirectory = Text
exportDirectory
, osvWireName :: Text
osvWireName = Ecosystem -> Text
ecosystemName Ecosystem
eco
, osvEcosystemTag :: Maybe Ecosystem
osvEcosystemTag = Ecosystem -> Maybe Ecosystem
forall a. a -> Maybe a
Just Ecosystem
eco
, osvMaxAdvisoryFanOut :: Int
osvMaxAdvisoryFanOut = Int
fanOut
}
where
exportDirectory :: Text
exportDirectory = case Ecosystem
eco of
Ecosystem
Npm -> Text
"npm"
Ecosystem
PyPI -> Text
"PyPI"
Ecosystem
RubyGems -> Text
"RubyGems"
fanOut :: Int
fanOut = case Ecosystem
eco of
Ecosystem
Npm -> Int
npmAdvisoryFanOut
Ecosystem
PyPI -> Int
pypiAdvisoryFanOut
Ecosystem
RubyGems -> Int
npmAdvisoryFanOut
osvEcosystemNamed :: Text -> OsvEcosystem
osvEcosystemNamed :: Text -> OsvEcosystem
osvEcosystemNamed Text
name = OsvEcosystem
-> (Ecosystem -> OsvEcosystem) -> Maybe Ecosystem -> OsvEcosystem
forall b a. b -> (a -> b) -> Maybe a -> b
maybe OsvEcosystem
unserved Ecosystem -> OsvEcosystem
osvEcosystemFor (Text -> Maybe Ecosystem
parseEcosystem Text
name)
where
unserved :: OsvEcosystem
unserved =
OsvEcosystem
{ osvExportDirectory :: Text
osvExportDirectory = Text
name
, osvWireName :: Text
osvWireName = Text
name
, osvEcosystemTag :: Maybe Ecosystem
osvEcosystemTag = Maybe Ecosystem
forall a. Maybe a
Nothing
, osvMaxAdvisoryFanOut :: Int
osvMaxAdvisoryFanOut = Int
npmAdvisoryFanOut
}