protocol-radius-0.0.1.0: src/Data/Radius/Scalar.hs
module Data.Radius.Scalar (
AtText (..), AtString (..), AtInteger (..), AtIpV4 (..),
Bin128, fromBin128, mayBin128, word64Bin128, bin128Zero,
) where
import Data.Monoid ((<>))
import Data.Word (Word32, Word64)
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.ByteString.Lazy (toStrict)
import Data.Serialize (encodeLazy)
newtype AtText = AtText { unAtText :: String } deriving (Eq, Ord, Show)
newtype AtString = AtString { unAtString :: ByteString } deriving (Eq, Ord, Show)
newtype AtInteger = AtInteger { unAtInteger :: Word32 } deriving (Eq, Ord, Show)
newtype AtIpV4 = AtIpV4 { unAtIpV4 :: Word32 } deriving (Eq, Ord, Show)
newtype Bin128 = Bin128 ByteString deriving (Eq, Ord, Show)
fromBin128 :: Bin128 -> ByteString
fromBin128 (Bin128 s) = s
mayBin128 :: ByteString -> Maybe Bin128
mayBin128 bs
| BS.length bs == 16 = Just $ Bin128 bs
| otherwise = Nothing
word64Bin128 :: Word64 -> Word64 -> Bin128
word64Bin128 h l = Bin128 . toStrict $ encodeLazy h <> encodeLazy l
bin128Zero :: Bin128
bin128Zero = word64Bin128 0 0