Restructured serializing/deserializing
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / snippets / SnippetDefinintion.java
1 package net.mograsim.logic.model.snippets;
2
3 import java.util.function.BiFunction;
4
5 import com.google.gson.Gson;
6 import com.google.gson.JsonElement;
7
8 public interface SnippetDefinintion<C, P, S>
9 {
10         public Class<P> getParamClass();
11
12         public S create(C context, P params);
13
14         public default S create(C context, JsonElement params)
15         {
16                 return create(context, new Gson().fromJson(params, getParamClass()));
17         }
18
19         public static <C, P, S> SnippetDefinintion<C, P, S> create(Class<P> paramClass, BiFunction<C, P, S> supplier)
20         {
21                 return new SnippetDefinintion<>()
22                 {
23                         @Override
24                         public Class<P> getParamClass()
25                         {
26                                 return paramClass;
27                         }
28
29                         @Override
30                         public S create(C context, P params)
31                         {
32                                 return supplier.apply(context, params);
33                         }
34                 };
35         }
36 }