From 15b28eeb4f78142fd40925cbbfec1cc0825f3a4a Mon Sep 17 00:00:00 2001 From: sagilio Date: Sun, 31 Jul 2022 00:06:38 +0800 Subject: [PATCH] feat: Add TrySetValue API in request values Signed-off-by: sagilio --- Casbin/Abstractions/Model/IRequestValues.cs | 2 + Casbin/Model/RequestValues.cs | 364 +++++++++++++++++++- 2 files changed, 360 insertions(+), 6 deletions(-) diff --git a/Casbin/Abstractions/Model/IRequestValues.cs b/Casbin/Abstractions/Model/IRequestValues.cs index 65f37c68..452c8f9f 100644 --- a/Casbin/Abstractions/Model/IRequestValues.cs +++ b/Casbin/Abstractions/Model/IRequestValues.cs @@ -5,4 +5,6 @@ public interface IRequestValues public string this[int index] { get; } public int Count { get; } + + public bool TrySetValue(int index, T value); } diff --git a/Casbin/Model/RequestValues.cs b/Casbin/Model/RequestValues.cs index ab3f1e2d..43571694 100644 --- a/Casbin/Model/RequestValues.cs +++ b/Casbin/Model/RequestValues.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace Casbin.Model; @@ -13,6 +14,7 @@ public struct RequestValues : IRequestValues }; public int Count => 0; + public bool TrySetValue(int index, T value) => false; internal static string ToStringValue(T value) { @@ -23,7 +25,6 @@ internal static string ToStringValue(T value) public struct RequestValues : IRequestValues { public RequestValues(T value) => Value1 = value; - public T Value1 { get; set; } public string this[int index] => index switch @@ -33,6 +34,18 @@ public struct RequestValues : IRequestValues }; public int Count => 1; + + public bool TrySetValue(int index, T1 value) + { + switch (index) + { + case 0 when value is T v: + Value1 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -54,6 +67,21 @@ public RequestValues(T1 value1, T2 value2) }; public int Count => 2; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -78,6 +106,24 @@ public RequestValues(T1 value1, T2 value2, T3 value3) }; public int Count => 3; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -105,6 +151,27 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4) }; public int Count => 4; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -135,6 +202,30 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5) }; public int Count => 5; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -168,6 +259,33 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 6; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -204,6 +322,36 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 7; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -243,6 +391,39 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 8; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + case 7 when value is T8 v: + Value8 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -286,6 +467,42 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 9; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + case 7 when value is T8 v: + Value8 = v; + return true; + case 8 when value is T9 v: + Value9 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -332,6 +549,45 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 10; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + case 7 when value is T8 v: + Value8 = v; + return true; + case 8 when value is T9 v: + Value9 = v; + return true; + case 9 when value is T10 v: + Value10 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -381,6 +637,48 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 11; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + case 7 when value is T8 v: + Value8 = v; + return true; + case 8 when value is T9 v: + Value9 = v; + return true; + case 9 when value is T10 v: + Value10 = v; + return true; + case 10 when value is T11 v: + Value11 = v; + return true; + default: + return false; + } + } } public struct RequestValues : IRequestValues @@ -433,17 +731,71 @@ public RequestValues(T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 v }; public int Count => 12; + + public bool TrySetValue(int index, T value) + { + switch (index) + { + case 0 when value is T1 v: + Value1 = v; + return true; + case 1 when value is T2 v: + Value2 = v; + return true; + case 2 when value is T3 v: + Value3 = v; + return true; + case 3 when value is T4 v: + Value4 = v; + return true; + case 4 when value is T5 v: + Value5 = v; + return true; + case 5 when value is T6 v: + Value6 = v; + return true; + case 6 when value is T7 v: + Value7 = v; + return true; + case 7 when value is T8 v: + Value8 = v; + return true; + case 8 when value is T9 v: + Value9 = v; + return true; + case 9 when value is T10 v: + Value10 = v; + return true; + case 10 when value is T11 v: + Value11 = v; + return true; + case 11 when value is T12 v: + Value12 = v; + return true; + default: + return false; + } + } } public readonly struct ObjectListRequestValues : IRequestValues { - private readonly IReadOnlyList _values; + private readonly IList _values; - public ObjectListRequestValues(IReadOnlyList values) - { - _values = values; - } + public ObjectListRequestValues(IReadOnlyList values) => + _values = values as IList ?? values.ToList(); public string this[int index] => RequestValues.ToStringValue(_values[index]); public int Count => _values.Count; + + public bool TrySetValue(int index, T value) + { + if (index < 0 || index >= Count) + { + return false; + } + + _values[index] = value; + return true; + } }