module Language.Asn.ObjectIdentifier where import Language.Asn.Types import Data.Maybe import Data.Text (Text) import Data.ByteString (ByteString) import qualified Data.Text as Text import qualified Data.ByteString as ByteString import qualified Data.ByteString.Char8 as BC8 import qualified Data.Vector as Vector import qualified Data.List as List fromList :: [Integer] -> ObjectIdentifier fromList = ObjectIdentifier . Vector.fromList suffixSingleton :: Integer -> ObjectIdentifierSuffix suffixSingleton = ObjectIdentifierSuffix . Vector.singleton appendSuffix :: ObjectIdentifier -> ObjectIdentifierSuffix -> ObjectIdentifier appendSuffix (ObjectIdentifier a) (ObjectIdentifierSuffix b) = ObjectIdentifier (a Vector.++ b) isPrefixOf :: ObjectIdentifier -> ObjectIdentifier -> Bool isPrefixOf a b = isJust (stripPrefix a b) -- improve this later stripPrefix :: ObjectIdentifier -> ObjectIdentifier -> Maybe ObjectIdentifierSuffix stripPrefix (ObjectIdentifier a) (ObjectIdentifier b) = let lenA = Vector.length a in if (lenA <= Vector.length b) && (a == Vector.take lenA b) then Just (ObjectIdentifierSuffix (Vector.drop lenA b)) else Nothing encodeString :: ObjectIdentifier -> String encodeString = List.intercalate "." . Vector.toList . Vector.map show . getObjectIdentifier encodeByteString :: ObjectIdentifier -> ByteString encodeByteString = BC8.pack . encodeString encodeText :: ObjectIdentifier -> Text encodeText = Text.pack . encodeString