{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports    #-}

-------------------------------------------------------------------------------

-- Orphan instances module for Cardano tracer.
{-# OPTIONS_GHC -Wno-orphans #-}
-- Extracted from "cardano-node" `Cardano.Node.Tracing.Tracers.P2P`.
-- Branch "master" (2026-02-11, 85869e9dd21d9dac7c4381418346e97259c3303b).

--------------------------------------------------------------------------------

module Ouroboros.Network.Tracing.PeerSelection.RootPeersDNS.PublicRootPeers () where

--------------------------------------------------------------------------------

---------
-- base -
---------
--
---------------------
-- Package: "aeson" -
---------------------
import "aeson" Data.Aeson (Value (String), toJSON, toJSONList, (.=))
---------------------------------
-- Package: "ouroboros-network" -
---------------------------------
-- Needed for `ToJSONKey PeerSelection.RelayAccessPoint.RelayAccessPoint`
import "ouroboros-network" Ouroboros.Network.OrphanInstances qualified ()
import "ouroboros-network" Ouroboros.Network.PeerSelection.RootPeersDNS.PublicRootPeers
           (TracePublicRootPeers (..))
--------------------
-- Package: "text" -
--------------------
import "text" Data.Text (pack)
--------------------------------
-- Package: "trace-dispatcher" -
--------------------------------
import "trace-dispatcher" Cardano.Logging

--------------------------------------------------------------------------------
-- PublicRootPeers Tracer
--------------------------------------------------------------------------------

instance LogFormatting TracePublicRootPeers where
  forMachine :: DetailLevel -> TracePublicRootPeers -> Object
forMachine DetailLevel
_dtal (TracePublicRootRelayAccessPoint Map RelayAccessPoint PeerAdvertise
relays) =
    [Object] -> Object
forall a. Monoid a => [a] -> a
mconcat [ Key
"kind" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"PublicRootRelayAddresses"
             , Key
"relayAddresses" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map RelayAccessPoint PeerAdvertise -> Value
forall a. ToJSON a => a -> Value
toJSON Map RelayAccessPoint PeerAdvertise
relays
             ]
  forMachine DetailLevel
_dtal (TracePublicRootDomains [RelayAccessPoint]
domains) =
    [Object] -> Object
forall a. Monoid a => [a] -> a
mconcat [ Key
"kind" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"PublicRootDomains"
             , Key
"domainAddresses" Key -> Value -> Object
forall v. ToJSON v => Key -> v -> Object
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [RelayAccessPoint] -> Value
forall a. ToJSON a => [a] -> Value
toJSONList [RelayAccessPoint]
domains
             ]
  forHuman :: TracePublicRootPeers -> Text
forHuman = String -> Text
pack (String -> Text)
-> (TracePublicRootPeers -> String) -> TracePublicRootPeers -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TracePublicRootPeers -> String
forall a. Show a => a -> String
show

instance MetaTrace TracePublicRootPeers where
  namespaceFor :: TracePublicRootPeers -> Namespace TracePublicRootPeers
namespaceFor TracePublicRootRelayAccessPoint {} = [Text] -> [Text] -> Namespace TracePublicRootPeers
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PublicRootRelayAccessPoint"]
  namespaceFor TracePublicRootDomains {} = [Text] -> [Text] -> Namespace TracePublicRootPeers
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PublicRootDomains"]

  severityFor :: Namespace TracePublicRootPeers
-> Maybe TracePublicRootPeers -> Maybe SeverityS
severityFor (Namespace [] [Text
"PublicRootRelayAccessPoint"]) Maybe TracePublicRootPeers
_ = SeverityS -> Maybe SeverityS
forall a. a -> Maybe a
Just SeverityS
Info
  severityFor (Namespace [] [Text
"PublicRootDomains"]) Maybe TracePublicRootPeers
_          = SeverityS -> Maybe SeverityS
forall a. a -> Maybe a
Just SeverityS
Info
  severityFor Namespace TracePublicRootPeers
_ Maybe TracePublicRootPeers
_                                             = Maybe SeverityS
forall a. Maybe a
Nothing

  documentFor :: Namespace TracePublicRootPeers -> Maybe Text
documentFor (Namespace [] [Text
"PublicRootRelayAccessPoint"]) = Text -> Maybe Text
forall a. a -> Maybe a
Just
    Text
""
  documentFor (Namespace [] [Text
"PublicRootDomains"]) = Text -> Maybe Text
forall a. a -> Maybe a
Just
    Text
""
  documentFor Namespace TracePublicRootPeers
_ = Maybe Text
forall a. Maybe a
Nothing

  allNamespaces :: [Namespace TracePublicRootPeers]
allNamespaces = [
      [Text] -> [Text] -> Namespace TracePublicRootPeers
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PublicRootRelayAccessPoint"]
    , [Text] -> [Text] -> Namespace TracePublicRootPeers
forall a. [Text] -> [Text] -> Namespace a
Namespace [] [Text
"PublicRootDomains"]
    ]