1+ using System . Diagnostics . CodeAnalysis ;
2+ using System . Linq ;
3+ using System . Text . Json ;
4+
5+ namespace GTranslate . Extensions ;
6+
7+ internal static class JsonElementExtensions
8+ {
9+ public static JsonElement FirstOrDefault ( this JsonElement element )
10+ => element . ValueKind == JsonValueKind . Array ? element . EnumerateArray ( ) . FirstOrDefault ( ) : default ;
11+
12+ public static JsonElement ElementAtOrDefault ( this JsonElement element , int index )
13+ => element . ValueKind == JsonValueKind . Array ? element . EnumerateArray ( ) . ElementAtOrDefault ( index ) : default ;
14+
15+ public static JsonElement LastOrDefault ( this JsonElement element )
16+ => element . ValueKind == JsonValueKind . Array ? element . EnumerateArray ( ) . LastOrDefault ( ) : default ;
17+
18+ public static JsonElement GetPropertyOrDefault ( this JsonElement element , string propertyName )
19+ => element . ValueKind == JsonValueKind . Object && element . TryGetProperty ( propertyName , out var value ) ? value : default ;
20+
21+ [ return : NotNullIfNotNull ( "defaultValue" ) ]
22+ public static string ? GetStringOrDefault ( this JsonElement element , string ? defaultValue = null )
23+ => element . ValueKind is JsonValueKind . String or JsonValueKind . Null ? element . GetString ( ) ?? defaultValue : defaultValue ;
24+
25+ public static int GetInt32OrDefault ( this JsonElement element , int defaultValue = default )
26+ => element . ValueKind == JsonValueKind . Number && element . TryGetInt32 ( out int value ) ? value : defaultValue ;
27+
28+ public static bool TryGetInt32 ( this JsonElement element , string propertyName , out int value )
29+ {
30+ value = 0 ;
31+ var prop = element . GetPropertyOrDefault ( propertyName ) ;
32+ return prop . ValueKind == JsonValueKind . Number && prop . TryGetInt32 ( out value ) ;
33+ }
34+
35+ public static bool TryGetSingle ( this JsonElement element , string propertyName , out float value )
36+ {
37+ value = 0 ;
38+ var prop = element . GetPropertyOrDefault ( propertyName ) ;
39+ return prop . ValueKind == JsonValueKind . Number && prop . TryGetSingle ( out value ) ;
40+ }
41+ }
0 commit comments