aboutsummaryrefslogtreecommitdiff
path: root/Types/View.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-02-17 00:18:57 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-02-17 00:18:57 -0400
commitf3865432b036c4e98a4012e9af4d0b1df787383c (patch)
treec500b5a7c18add2d3e6a6e2d151c3317cc68e48a /Types/View.hs
parentd2455918de02e407c463597d4656aeb9adb59010 (diff)
split out types
Diffstat (limited to 'Types/View.hs')
-rw-r--r--Types/View.hs62
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