/ Framework / KubernetesWorkflow / Recipe / ContainerAdditionals.cs
ContainerAdditionals.cs
 1  using Newtonsoft.Json;
 2  using Newtonsoft.Json.Linq;
 3  
 4  namespace KubernetesWorkflow.Recipe
 5  {
 6      public class ContainerAdditionals
 7      {
 8          public ContainerAdditionals(Additional[] additionals)
 9          {
10              Additionals = additionals;
11          }
12  
13          public static ContainerAdditionals CreateFromUserData(IEnumerable<object> userData)
14          {
15              return new ContainerAdditionals(userData.Select(ConvertToAdditional).ToArray());
16          }
17  
18          public Additional[] Additionals { get; }
19  
20          public T? Get<T>()
21          {
22              var typeName = GetTypeName(typeof(T));
23              var userData = Additionals.SingleOrDefault(a => a.Type == typeName);
24              if (userData == null) return default;
25              return JsonConvert.DeserializeObject<T>(userData.UserData);
26          }
27  
28          private static Additional ConvertToAdditional(object userData)
29          {
30              var typeName = GetTypeName(userData.GetType());
31              return new Additional(typeName, JsonConvert.SerializeObject(userData));
32          }
33  
34          private static string GetTypeName(Type type)
35          {
36              var typeName = type.FullName;
37              if (string.IsNullOrEmpty(typeName)) throw new Exception("Object type fullname is null or empty: " + type);
38              return typeName;
39          }
40      }
41  
42      public class Additional
43      {
44          public Additional(string type, string userData)
45          {
46              Type = type;
47              UserData = userData;
48          }
49  
50          public string Type { get; }
51          public string UserData { get; }
52      }
53  }