/
HypermediaConfigurationExtension.cs
50 lines (42 loc) · 1.82 KB
/
HypermediaConfigurationExtension.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Linq;
using WebApi.Hal.Interfaces;
namespace WebApi.Hal
{
public static class HypermediaConfigurationExtension
{
public static void Register<T>(this IHypermediaBuilder builder, Link<T> selfLink, IHypermediaAppender<T> appender, params Link[] links) where T : class, IResource
{
if (selfLink == null)
throw new ArgumentNullException(nameof(selfLink));
if (appender == null)
throw new ArgumentNullException(nameof(appender));
builder.RegisterSelf(selfLink);
builder.RegisterAppender(appender);
builder.RegisterLinks<T>(links);
}
public static void Register<T>(this IHypermediaBuilder builder, Link<T> selfLink, Action<T, IEnumerable<Link>> appender, params Link[] links) where T : class, IResource
{
if (selfLink == null)
throw new ArgumentNullException(nameof(selfLink));
if (appender == null)
throw new ArgumentNullException(nameof(appender));
builder.RegisterSelf(selfLink);
builder.RegisterAppender(new ActionBasedHypermediaAppender<T>(appender));
builder.RegisterLinks<T>(links);
}
public static void Register<T>(this IHypermediaBuilder builder, Link<T> selfLink, params Link[] links) where T : class, IResource
{
if (selfLink == null)
throw new ArgumentNullException(nameof(selfLink));
builder.RegisterSelf(selfLink);
builder.RegisterLinks<T>(links);
builder.RegisterAppender(new ActionBasedHypermediaAppender<T>(
(resource, configured) =>
{
resource.Links = configured.ToList();
}));
}
}
}