packages feed

data-rfc5280-0.1.0.0: src/Data/Rfc5280/CertificatePolicies.hs

{- |
Module      : Data.Rfc5280.CertificatePolicies
Copyright   : (c) 2026 Tim Emiola
Maintainer  : Tim Emiola <adetokunbo@emio.la>
SPDX-License-Identifier: BSD3

Provides the 'CertificatePolicies' extension type and its smart constructor.
-}
module Data.Rfc5280.CertificatePolicies
  ( CertificatePolicies (..)
  , mkCertificatePolicies
  )
where

import Data.List.NonEmpty (NonEmpty (..))
import Data.Rfc5280.HasOID (HasOID (..))
import Data.Rfc5280.Internal (OID, RenderConfig (..), intersperseCommas, oidBuilder)


{- | Represents @CertificatePolicies@ (RFC 5280 §4.2.1.4).

Only the policy OIDs are modelled. @PolicyQualifierInfo@ entries (CPS URIs,
user notices) are not yet supported.
-}
newtype CertificatePolicies = CertificatePolicies (NonEmpty OID)
  deriving (Eq, Show)


-- | Construct @CertificatePolicies@ from a non-empty sequence of OIDs.
mkCertificatePolicies :: OID -> [OID] -> CertificatePolicies
mkCertificatePolicies x xs = CertificatePolicies $ x :| xs


instance HasOID CertificatePolicies where
  extensionOID _ = 2 :| [5, 29, 32]


instance RenderConfig CertificatePolicies where
  renderBuilder (CertificatePolicies xs) = intersperseCommas $ fmap oidBuilder xs