module Cardano.Network.Protocol.PeerSharing.Codec
  ( codecPeerSharing
  , Codec.codecPeerSharingId
  , Codec.byteLimitsPeerSharing
  , Codec.timeLimitsPeerSharing
  ) where

import Codec.CBOR.Read qualified as CBOR
import Data.ByteString.Lazy qualified as BL
import Network.TypedProtocol.Codec

import Cardano.Network.NodeToNode.Version

import Ouroboros.Network.PeerSelection.PeerSharing.Codec (decodeRemoteAddress,
           encodeRemoteAddress)
import Ouroboros.Network.Protocol.PeerSharing.Codec qualified as Codec
import Ouroboros.Network.Protocol.PeerSharing.Type
import Ouroboros.Network.Snocket (RemoteAddress)

codecPeerSharing :: NodeToNodeVersion
                 -> Codec (PeerSharing RemoteAddress)
                         CBOR.DeserialiseFailure IO BL.ByteString
codecPeerSharing :: NodeToNodeVersion
-> Codec
     (PeerSharing RemoteAddress) DeserialiseFailure IO ByteString
codecPeerSharing NodeToNodeVersion
ntnVersion =
  (RemoteAddress -> Encoding)
-> (forall s. Decoder s RemoteAddress)
-> Codec
     (PeerSharing RemoteAddress) DeserialiseFailure IO ByteString
forall (m :: * -> *) peerAddress.
MonadST m =>
(peerAddress -> Encoding)
-> (forall s. Decoder s peerAddress)
-> Codec (PeerSharing peerAddress) DeserialiseFailure m ByteString
Codec.codecPeerSharing (NodeToNodeVersion -> RemoteAddress -> Encoding
forall version. version -> RemoteAddress -> Encoding
encodeRemoteAddress NodeToNodeVersion
ntnVersion)
                         (NodeToNodeVersion -> Decoder s RemoteAddress
forall version s. version -> Decoder s RemoteAddress
decodeRemoteAddress NodeToNodeVersion
ntnVersion)