Added hammock project to debug streaming issues
[pithos-ms-client] / trunk / hammock / src / net35 / Hammock / Extensions / SpecificationExtensions.cs
1 using System;
2 using Hammock.Specifications;
3
4 namespace Hammock.Extensions
5 {
6     internal static class SpecificationExtensions
7     {
8         public static bool Satisfies<T>(this object instance) where T : ISpecification
9         {
10             var marker = Activator.CreateInstance<T>();
11             var type = typeof (ISpecification<>).MakeGenericType(instance.GetType());
12             var match = marker.Implements(type);
13
14             if (!match)
15             {
16                 return false;
17             }
18
19             var method = type.GetMethod("IsSatisfiedBy");
20             var result = method.Invoke(marker, new[] {instance});
21
22             return (bool) result;
23         }
24
25         public static bool Satisfies(this object instance, ISpecification specificationType)
26         {
27             var type = typeof (ISpecification<>).MakeGenericType(instance.GetType());
28             var match = specificationType.Implements(type);
29
30             if (!match)
31             {
32                 return false;
33             }
34
35             var method = type.GetMethod("IsSatisfiedBy");
36             var result = method.Invoke(specificationType, new[] {instance});
37
38             return (bool) result;
39         }
40     }
41 }