root / src / Ganeti / Parsers.hs @ 7ea201c9
History | View | Annotate | Download (1.7 kB)
1 | f5bbddb5 | Spyros Trigazis | {-# LANGUAGE OverloadedStrings #-} |
---|---|---|---|
2 | f5bbddb5 | Spyros Trigazis | {-| Utility functions for several parsers |
3 | f5bbddb5 | Spyros Trigazis | |
4 | f5bbddb5 | Spyros Trigazis | This module holds the definition for some utility functions for two |
5 | f5bbddb5 | Spyros Trigazis | parsers. The parser for the @/proc/stat@ file and the parser for the |
6 | f5bbddb5 | Spyros Trigazis | @/proc/diskstats@ file. |
7 | f5bbddb5 | Spyros Trigazis | |
8 | f5bbddb5 | Spyros Trigazis | -} |
9 | f5bbddb5 | Spyros Trigazis | {- |
10 | f5bbddb5 | Spyros Trigazis | |
11 | f5bbddb5 | Spyros Trigazis | Copyright (C) 2013 Google Inc. |
12 | f5bbddb5 | Spyros Trigazis | |
13 | f5bbddb5 | Spyros Trigazis | This program is free software; you can redistribute it and/or modify |
14 | f5bbddb5 | Spyros Trigazis | it under the terms of the GNU General Public License as published by |
15 | f5bbddb5 | Spyros Trigazis | the Free Software Foundation; either version 2 of the License, or |
16 | f5bbddb5 | Spyros Trigazis | (at your option) any later version. |
17 | f5bbddb5 | Spyros Trigazis | |
18 | f5bbddb5 | Spyros Trigazis | This program is distributed in the hope that it will be useful, but |
19 | f5bbddb5 | Spyros Trigazis | WITHOUT ANY WARRANTY; without even the implied warranty of |
20 | f5bbddb5 | Spyros Trigazis | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
21 | f5bbddb5 | Spyros Trigazis | General Public License for more details. |
22 | f5bbddb5 | Spyros Trigazis | |
23 | f5bbddb5 | Spyros Trigazis | You should have received a copy of the GNU General Public License |
24 | f5bbddb5 | Spyros Trigazis | along with this program; if not, write to the Free Software |
25 | f5bbddb5 | Spyros Trigazis | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
26 | f5bbddb5 | Spyros Trigazis | 02110-1301, USA. |
27 | f5bbddb5 | Spyros Trigazis | |
28 | f5bbddb5 | Spyros Trigazis | -} |
29 | f5bbddb5 | Spyros Trigazis | module Ganeti.Parsers where |
30 | f5bbddb5 | Spyros Trigazis | |
31 | f5bbddb5 | Spyros Trigazis | import Control.Applicative ((*>)) |
32 | f5bbddb5 | Spyros Trigazis | import qualified Data.Attoparsec.Text as A |
33 | f5bbddb5 | Spyros Trigazis | import Data.Attoparsec.Text (Parser) |
34 | f5bbddb5 | Spyros Trigazis | import Data.Text (unpack) |
35 | f5bbddb5 | Spyros Trigazis | |
36 | f5bbddb5 | Spyros Trigazis | -- * Utility functions |
37 | f5bbddb5 | Spyros Trigazis | |
38 | f5bbddb5 | Spyros Trigazis | -- | Our own space-skipping function, because A.skipSpace also skips |
39 | f5bbddb5 | Spyros Trigazis | -- newline characters. It skips ZERO or more spaces, so it does not |
40 | f5bbddb5 | Spyros Trigazis | -- fail if there are no spaces. |
41 | f5bbddb5 | Spyros Trigazis | skipSpaces :: Parser () |
42 | f5bbddb5 | Spyros Trigazis | skipSpaces = A.skipWhile A.isHorizontalSpace |
43 | f5bbddb5 | Spyros Trigazis | |
44 | f5bbddb5 | Spyros Trigazis | -- | A parser recognizing a number preceeded by spaces. |
45 | f5bbddb5 | Spyros Trigazis | numberP :: Parser Int |
46 | f5bbddb5 | Spyros Trigazis | numberP = skipSpaces *> A.decimal |
47 | f5bbddb5 | Spyros Trigazis | |
48 | f5bbddb5 | Spyros Trigazis | -- | A parser recognizing a word preceded by spaces, and closed by a space. |
49 | f5bbddb5 | Spyros Trigazis | stringP :: Parser String |
50 | f5bbddb5 | Spyros Trigazis | stringP = skipSpaces *> fmap unpack (A.takeWhile $ not . A.isHorizontalSpace) |