diff options
author | Joey Hess <joey@kitenet.net> | 2014-02-17 00:18:57 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-02-17 00:18:57 -0400 |
commit | f3865432b036c4e98a4012e9af4d0b1df787383c (patch) | |
tree | c500b5a7c18add2d3e6a6e2d151c3317cc68e48a /Types/View.hs | |
parent | d2455918de02e407c463597d4656aeb9adb59010 (diff) |
split out types
Diffstat (limited to 'Types/View.hs')
-rw-r--r-- | Types/View.hs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Types/View.hs b/Types/View.hs new file mode 100644 index 000000000..ff2731593 --- /dev/null +++ b/Types/View.hs @@ -0,0 +1,62 @@ +{- types for metadata based branch views + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Types.View where + +import Common.Annex +import Types.MetaData +import Utility.QuickCheck + +import qualified Data.Set as S + +#ifdef WITH_TDFA +import Text.Regex.TDFA +#else +#endif + +{- A view is a list of fields with filters on their allowed values. -} +type View = [(MetaField, ViewFilter)] + +{- Only files with metadata matching the view are displayed. -} +type FileView = FilePath +type MkFileView = FilePath -> FileView + +data ViewFilter + = FilterValues (S.Set MetaValue) + | FilterGlob Glob + +instance Show ViewFilter where + show (FilterValues s) = show s + show (FilterGlob g) = getGlob g + +instance Eq ViewFilter where + FilterValues x == FilterValues y = x == y + FilterGlob x == FilterGlob y = x == y + _ == _ = False + +instance Arbitrary ViewFilter where + arbitrary = do + size <- arbitrarySizedBoundedIntegral `suchThat` (< 100) + FilterValues . S.fromList <$> vector size + +#ifdef WITH_TDFA +data Glob = Glob String Regex +#else +data Glob = Glob String +#endif + +instance Eq Glob where + a == b = getGlob a == getGlob b + +getGlob :: Glob -> String +#ifdef WITH_TDFA +getGlob (Glob g _) = g +#else +getGlob (Glob g) = g +#endif |