|
1 | 1 | {-# LANGUAGE DeriveAnyClass #-}
|
| 2 | +{-# LANGUAGE GeneralisedNewtypeDeriving #-} |
2 | 3 | {-# LANGUAGE StrictData #-}
|
3 | 4 | module Cardano.Analysis.Context (module Cardano.Analysis.Context) where
|
4 | 5 |
|
5 | 6 | import Cardano.Prelude
|
6 | 7 |
|
7 |
| -import Data.Aeson (FromJSON, ToJSON) |
| 8 | +import Data.Aeson (FromJSON (..), ToJSON (..), withObject, object, (.:), (.:?), (.=)) |
| 9 | +import Data.Text qualified as T |
8 | 10 | import Data.Time.Clock (UTCTime, NominalDiffTime)
|
9 | 11 |
|
10 | 12 |
|
@@ -52,10 +54,74 @@ data GeneratorProfile
|
52 | 54 | }
|
53 | 55 | deriving (Generic, Show, FromJSON, ToJSON)
|
54 | 56 |
|
| 57 | +newtype Commit = Commit { unCommit :: Text } deriving newtype (Show, FromJSON, ToJSON) |
| 58 | +newtype Branch = Branch { unBranch :: Text } deriving newtype (Show, FromJSON, ToJSON) |
| 59 | +newtype Version = Version { unVersion :: Text } deriving newtype (Show, FromJSON, ToJSON) |
| 60 | + |
| 61 | +unsafeShortenCommit :: Int -> Commit -> Commit |
| 62 | +unsafeShortenCommit n (Commit c) = Commit (T.take n c) |
| 63 | + |
| 64 | +data Manifest |
| 65 | + = Manifest |
| 66 | + { mNode :: !Commit |
| 67 | + , mNodeApproxVer :: !Version |
| 68 | + , mNodeBranch :: !Branch |
| 69 | + , mNodeStatus :: !Text |
| 70 | + , mNetwork :: !Commit |
| 71 | + , mLedger :: !Commit |
| 72 | + , mPlutus :: !Commit |
| 73 | + , mCrypto :: !Commit |
| 74 | + , mBase :: !Commit |
| 75 | + , mPrelude :: !Commit |
| 76 | + } |
| 77 | + deriving (Generic, Show) |
| 78 | + |
| 79 | +unsafeShortenManifest :: Int -> Manifest -> Manifest |
| 80 | +unsafeShortenManifest n m@Manifest{..} = |
| 81 | + m { mNode = unsafeShortenCommit n mNode |
| 82 | + , mNetwork = unsafeShortenCommit n mNetwork |
| 83 | + , mLedger = unsafeShortenCommit n mLedger |
| 84 | + , mPlutus = unsafeShortenCommit n mPlutus |
| 85 | + , mCrypto = unsafeShortenCommit n mCrypto |
| 86 | + , mBase = unsafeShortenCommit n mBase |
| 87 | + , mPrelude = unsafeShortenCommit n mPrelude |
| 88 | + } |
| 89 | + |
| 90 | +instance FromJSON Manifest where |
| 91 | + parseJSON = withObject "Manifest" $ \v -> do |
| 92 | + mNode <- v .: "cardano-node" |
| 93 | + mNodeBranch <- v .:? "cardano-node-branch" <&> fromMaybe (Branch "unknown") |
| 94 | + mNodeApproxVer <- v .:? "cardano-node-version" <&> fromMaybe (Version "unknown") |
| 95 | + mNodeStatus <- v .: "cardano-node-status" |
| 96 | + mNetwork <- v .: "ouroboros-network" |
| 97 | + mLedger <- v .: "cardano-ledger" |
| 98 | + mPlutus <- v .: "plutus" |
| 99 | + mCrypto <- v .: "cardano-crypto" |
| 100 | + mBase <- v .: "cardano-base" |
| 101 | + mPrelude <- v .: "cardano-prelude" |
| 102 | + pure Manifest{..} |
| 103 | + |
| 104 | +instance ToJSON Manifest where |
| 105 | + toJSON Manifest{..} = |
| 106 | + object |
| 107 | + [ "cardano-node" .= mNode |
| 108 | + , "cardano-node-branch" .= mNodeBranch |
| 109 | + , "cardano-node-version" .= mNodeApproxVer |
| 110 | + , "cardano-node-status" .= mNodeStatus |
| 111 | + , "ouroboros-network" .= mNetwork |
| 112 | + , "cardano-ledger" .= mLedger |
| 113 | + , "plutus" .= mPlutus |
| 114 | + , "cardano-crypto" .= mCrypto |
| 115 | + , "cardano-base" .= mBase |
| 116 | + , "cardano-prelude" .= mPrelude |
| 117 | + ] |
| 118 | + |
55 | 119 | data Metadata
|
56 | 120 | = Metadata
|
57 | 121 | { tag :: Text
|
| 122 | + , batch :: Text |
58 | 123 | , profile :: Text
|
59 | 124 | , era :: Text
|
| 125 | + , manifest :: Manifest |
60 | 126 | }
|
61 | 127 | deriving (Generic, Show, FromJSON, ToJSON)
|
0 commit comments