33public readonly struct Target
44{
55 internal readonly StringBuilder ? stringBuilderData ;
6+ readonly object ? objectData ;
67 internal readonly Stream ? streamData ;
78 public string Extension { get ; }
89 public string ? Name { get ; } = null ;
910 public bool PerformConversion { get ; } = true ;
1011 public string NameOrTarget => Name ?? "target" ;
1112
12- public StringBuilder StringBuilderData
13+ public Stream StreamData
1314 {
1415 get
1516 {
16- if ( stringBuilderData is null )
17+ if ( streamData is null )
1718 {
18- throw new ( "Use StreamData ." ) ;
19+ throw new ( "Use StringData or StringBuilderData ." ) ;
1920 }
2021
21- return stringBuilderData ;
22+ return streamData ;
2223 }
2324 }
2425
25- public Stream StreamData
26+
27+ public StringBuilder StringBuilderData
2628 {
2729 get
2830 {
29- if ( streamData is null )
31+ if ( stringBuilderData is null )
3032 {
31- throw new ( "Use StringData or StringBuilderData ." ) ;
33+ throw new ( "Use StreamData ." ) ;
3234 }
3335
34- return streamData ;
36+ return stringBuilderData ;
3537 }
3638 }
37-
3839 public bool IsStream => streamData is not null ;
39- public bool IsString => stringBuilderData is not null ;
40+ public bool IsString => stringBuilderData is not null || objectData is not null ;
41+ public bool IsObject => objectData is not null ;
4042
4143 internal bool TryGetStringBuilder ( [ NotNullWhen ( true ) ] out StringBuilder ? value )
4244 {
@@ -50,6 +52,18 @@ internal bool TryGetStringBuilder([NotNullWhen(true)] out StringBuilder? value)
5052 return false ;
5153 }
5254
55+ internal bool TryGetObject ( [ NotNullWhen ( true ) ] out object ? value )
56+ {
57+ if ( objectData is { } @object )
58+ {
59+ value = @object ;
60+ return true ;
61+ }
62+
63+ value = null ;
64+ return false ;
65+ }
66+
5367 [ OverloadResolutionPriority ( - 1 ) ]
5468 public Target ( string extension , Stream data , string ? name = null ) :
5569 this ( extension , data , name , true )
@@ -83,10 +97,16 @@ public Target(string extension, StringBuilder data, string? name = null)
8397
8498 Extension = extension ;
8599 Name = FileNameCleaner . SanitizeFilePath ( name ) ;
86- streamData = null ;
87100 stringBuilderData = data ;
88101 }
89102
103+ public Target ( object data , string extension , string ? name = null )
104+ {
105+ Extension = extension ;
106+ Name = FileNameCleaner . SanitizeFilePath ( name ) ;
107+ objectData = data ;
108+ }
109+
90110 static void ValidateExtension ( string extension )
91111 {
92112 Guards . AgainstBadExtension ( extension ) ;
@@ -111,6 +131,5 @@ public Target(string extension, string data, string? name = null)
111131 Extension = extension ;
112132 Name = FileNameCleaner . SanitizeFilePath ( name ) ;
113133 stringBuilderData = new ( data ) ;
114- streamData = null ;
115134 }
116135}
0 commit comments