diff --git a/src/ElectronNET.API/API/Entities/PageSize.cs b/src/ElectronNET.API/API/Entities/PageSize.cs new file mode 100644 index 0000000..607a59c --- /dev/null +++ b/src/ElectronNET.API/API/Entities/PageSize.cs @@ -0,0 +1,20 @@ +namespace ElectronNET.API.Entities; + +public class PageSize +{ + private readonly string _value; + + public PageSize() + { + } + + private PageSize(string value) : this() => _value = value; + + public double Height { get; set; } + + public double Width { get; set; } + + public static implicit operator string(PageSize pageSize) => pageSize?._value; + + public static implicit operator PageSize(string value) => new(value); +} diff --git a/src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs b/src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs index 771b755..30b7b1d 100644 --- a/src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs +++ b/src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs @@ -1,4 +1,7 @@ -namespace ElectronNET.API.Entities; +using ElectronNET.Converter; +using Newtonsoft.Json; + +namespace ElectronNET.API.Entities; /// /// @@ -30,7 +33,8 @@ public class PrintToPDFOptions /// `A5`, `A6`, `Legal`, `Letter`, `Tabloid`, `Ledger`, or an Object containing /// `height` and `width` in inches. Defaults to `Letter`. /// - public object PageSize { get; set; } = "Letter"; + [JsonConverter(typeof(PageSizeConverter))] + public PageSize PageSize { get; set; } = "Letter"; /// /// Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, diff --git a/src/ElectronNET.API/Converter/PageSizeConverter.cs b/src/ElectronNET.API/Converter/PageSizeConverter.cs new file mode 100644 index 0000000..5e5e559 --- /dev/null +++ b/src/ElectronNET.API/Converter/PageSizeConverter.cs @@ -0,0 +1,43 @@ +using ElectronNET.API.Entities; +using Newtonsoft.Json; +using System; + +namespace ElectronNET.Converter; + +public class PageSizeConverter : JsonConverter +{ + public override PageSize ReadJson(JsonReader reader, Type objectType, PageSize existingValue, bool hasExistingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.String) + { + return (string)reader.Value; + } + else if (reader.TokenType == JsonToken.StartObject) + { + return serializer.Deserialize(reader); + } + else + { + throw new JsonSerializationException("Invalid value for PageSize. Expected true, false, or an object."); + } + } + + public override void WriteJson(JsonWriter writer, PageSize value, JsonSerializer serializer) + { + if (value is null) + { + writer.WriteUndefined(); + } + + var str = (string)value; + + if (str is not null) + { + writer.WriteValue(str); + } + else + { + serializer.Serialize(writer, value); + } + } +}