packages feed

attoparsec-ip (empty) → 0.0.0

raw patch · 6 files changed

+138/−0 lines, 6 filesdep +attoparsecdep +attoparsec-ipdep +basesetup-changed

Dependencies added: attoparsec, attoparsec-ip, base, ip

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Athan Clark (c) 2017++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Athan Clark nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,1 @@+# attoparsec-ip
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ attoparsec-ip.cabal view
@@ -0,0 +1,35 @@+name:                attoparsec-ip+version:             0.0.0+synopsis:            Parse IP data types with attoparsec+-- description:+homepage:            https://github.com/athanclark/attoparsec-ip#readme+license:             BSD3+license-file:        LICENSE+author:              Athan Clark+maintainer:          athan.clark@gmail.com+copyright:           BSD-3+category:            Web+build-type:          Simple+extra-source-files:  README.md+cabal-version:       >=1.10++library+  hs-source-dirs:      src+  exposed-modules:     Data.Attoparsec.IP+  build-depends:       base >= 4.7 && < 5+                     , attoparsec+                     , ip+  default-language:    Haskell2010++test-suite attoparsec-ip-test+  type:                exitcode-stdio-1.0+  hs-source-dirs:      test+  main-is:             Spec.hs+  build-depends:       base+                     , attoparsec-ip+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N+  default-language:    Haskell2010++source-repository head+  type:     git+  location: https://github.com/athanclark/attoparsec-ip
+ src/Data/Attoparsec/IP.hs view
@@ -0,0 +1,68 @@+module Data.Attoparsec.IP where++import Data.Attoparsec.Text (Parser, char, digit, hexadecimal)+import Data.Word (Word8, Word16)+import Control.Applicative ((<|>))+import Control.Monad (void)+import Net.Types (IPv4, IPv6)+import qualified Net.IPv4 as IPv4+import qualified Net.IPv6 as IPv6+++ipv4 :: Parser IPv4+ipv4 = do+  a <- octet+  void $ char '.'+  b <- octet+  void $ char '.'+  c <- octet+  void $ char '.'+  d <- octet+  pure (IPv4.fromOctets a b c d)+  where+    octet :: Parser Word8+    octet = do+      (a,b,c) <-+        let oneDigit = do+              n <- digit+              pure ('0','0',n)+            twoDigit = do+              n <- digit+              m <- digit+              pure ('0',n,m)+            threeDigit = do+              n <- digit+              m <- digit+              o <- digit+              pure (n,m,o)+        in  threeDigit <|> twoDigit <|> oneDigit+      let n :: Word8+          n = read (a:b:c:[])+      pure n+++ipv6 :: Parser IPv6+ipv6 = do+  a <- hexadecimal+  void $ char ':'+  b <- hexadecimal+  void $ char ':'+  c <- hexadecimal+  void $ char ':'+  d <- hexadecimal+  void $ char ':'+  (e,f,g,h) <- do+    let anotherColon = do+          void $ char ':'+          pure (0,0,0,0)+        moreChunks = do+          e' <- hexadecimal+          void $ char ':'+          f' <- hexadecimal+          void $ char ':'+          g' <- hexadecimal+          void $ char ':'+          h' <- hexadecimal+          pure (e',f',g',h')+    anotherColon <|> moreChunks+  pure (IPv6.fromWord16s a b c d e f g h)
+ test/Spec.hs view
@@ -0,0 +1,2 @@+main :: IO ()+main = putStrLn "Test suite not yet implemented"