diff --git a/src/main/java/io/github/eggy03/dmidecode/annotation/ImmutableEntityStyle.java b/src/main/java/io/github/eggy03/dmidecode/annotation/ImmutableEntityStyle.java index 8441871..6a8c882 100644 --- a/src/main/java/io/github/eggy03/dmidecode/annotation/ImmutableEntityStyle.java +++ b/src/main/java/io/github/eggy03/dmidecode/annotation/ImmutableEntityStyle.java @@ -1,7 +1,6 @@ package io.github.eggy03.dmidecode.annotation; import org.immutables.value.Value; -import tools.jackson.databind.annotation.JsonSerialize; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -15,17 +14,15 @@ *
** It modifies the naming and structural style of the generated immutable implementations via {@link Value.Style} - * and contains {@link JsonSerialize} for automatic Jackson integration. *
* * @since 0.2.0 */ @Target({ElementType.PACKAGE, ElementType.TYPE}) @Retention(RetentionPolicy.CLASS) // Make it class retention for incremental compilation -@JsonSerialize // Jackson automatic integration @Value.Style( - typeAbstract = {"Abstract*"}, // 'Abstract' prefix will be detected and trimmed - typeImmutable = "*", // No prefix or suffix for generated immutable type + typeAbstract = {"*"}, // No prefixes or suffixes will be detected and trimmed + typeImmutable = "Immutable*", // Generated immutable type will have Immutable prefix added visibility = Value.Style.ImplementationVisibility.PUBLIC, // Generated class will be always public builder = "new", // construct builder using 'new' instead of factory method (required for Jackson). // Generated builders will have attributes annotated with @JsonProperty so deserialization will work properly. diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOS.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOS.java similarity index 82% rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOS.java rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOS.java index 62de8f7..59c6066 100644 --- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOS.java +++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOS.java @@ -11,6 +11,8 @@ import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.annotation.JsonDeserialize; +import tools.jackson.databind.annotation.JsonSerialize; import java.util.List; @@ -24,25 +26,14 @@ * Instances of this class are thread-safe. * * - *{@code
- * DMIBIOS bios = new DMIBIOS.Builder()
- * .vendor("American Megatrends Inc.")
- * .version("F10")
- * .releaseDate("07/15/2023")
- * .build();
- *
- * // Create a modified copy
- * DMIBIOS updated = bios
- * .withVersion("F11");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIBIOS {
+@JsonSerialize(as = ImmutableDMIBIOS.class)
+@JsonDeserialize(as = ImmutableDMIBIOS.class)
+public abstract class DMIBIOS {
@JsonProperty("Vendor")
@Nullable
@@ -80,8 +71,7 @@ public abstract class AbstractDMIBIOS {
@Nullable
public abstract String firmwareRevision();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOSLanguage.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOSLanguage.java
similarity index 74%
rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOSLanguage.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOSLanguage.java
index ba3cdb1..d9b5e37 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBIOSLanguage.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBIOSLanguage.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.util.List;
@@ -24,24 +26,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIBIOSLanguage language = new DMIBIOSLanguage.Builder()
- * .installableLanguages(List.of("en|US", "fr|FR"))
- * .currentLanguage("en|US")
- * .build();
- *
- * // Create a modified copy
- * DMIBIOSLanguage updated = language
- * .withCurrentLanguage("fr|FR");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIBIOSLanguage {
+@JsonSerialize(as = ImmutableDMIBIOSLanguage.class)
+@JsonDeserialize(as = ImmutableDMIBIOSLanguage.class)
+public abstract class DMIBIOSLanguage {
@JsonProperty("Installable Languages")
@Nullable
@@ -51,8 +43,7 @@ public abstract class AbstractDMIBIOSLanguage {
@Nullable
public abstract String currentLanguage();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBaseboard.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBaseboard.java
similarity index 80%
rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBaseboard.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBaseboard.java
index 72adbed..bc7f0e5 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIBaseboard.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIBaseboard.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.util.List;
@@ -24,26 +26,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIBaseboard board = new DMIBaseboard.Builder()
- * .manufacturer("ASUSTeK COMPUTER INC.")
- * .productName("PRIME B550M-A")
- * .serialNumber("ABC123456")
- * .build();
- *
- * // Create a modified copy
- * DMIBaseboard updated = board
- * .withSerialNumber("XYZ987654")
- * .withProductName("PRIME A320");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIBaseboard {
+@JsonSerialize(as = ImmutableDMIBaseboard.class)
+@JsonDeserialize(as = ImmutableDMIBaseboard.class)
+public abstract class DMIBaseboard {
@JsonProperty("Manufacturer")
@Nullable
@@ -85,8 +75,7 @@ public abstract class AbstractDMIBaseboard {
@Nullable
public abstract Integer containedObjectHandles();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIChassis.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIChassis.java
similarity index 85%
rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIChassis.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMIChassis.java
index a36fce1..20c4edf 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIChassis.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIChassis.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of system chassis information retrieved via DMI.
@@ -22,25 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIChassis chassis = new DMIChassis.Builder()
- * .manufacturer("Dell Inc.")
- * .type("Desktop")
- * .serialNumber("ABC123456")
- * .build();
- *
- * // Create a modified copy
- * DMIChassis updated = chassis
- * .withAssetTag("OFFICE-PC-01");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIChassis {
+@JsonSerialize(as = ImmutableDMIChassis.class)
+@JsonDeserialize(as = ImmutableDMIChassis.class)
+public abstract class DMIChassis {
@JsonProperty("Manufacturer")
@Nullable
@@ -102,8 +93,7 @@ public abstract class AbstractDMIChassis {
@Nullable
public abstract String skuNumber();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIPortConnectorInformation.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIPortConnectorInformation.java
similarity index 76%
rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIPortConnectorInformation.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMIPortConnectorInformation.java
index cfeaa3e..a5b9002 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMIPortConnectorInformation.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMIPortConnectorInformation.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of port connector information retrieved via DMI.
@@ -22,25 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIPortConnectorInformation port = new DMIPortConnectorInformation.Builder()
- * .externalReferenceDesignator("USB1")
- * .externalConnectorType("USB")
- * .portType("USB")
- * .build();
- *
- * // Create a modified copy
- * DMIPortConnectorInformation updated = port
- * .withPortType("USB Type-C");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIPortConnectorInformation {
+@JsonSerialize(as = ImmutableDMIPortConnectorInformation.class)
+@JsonDeserialize(as = ImmutableDMIPortConnectorInformation.class)
+public abstract class DMIPortConnectorInformation {
@JsonProperty("External Reference Designator")
@Nullable
@@ -62,8 +53,7 @@ public abstract class AbstractDMIPortConnectorInformation {
@Nullable
public abstract String portType();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMISystemSlots.java b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMISystemSlots.java
similarity index 78%
rename from src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMISystemSlots.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/board/DMISystemSlots.java
index 956f169..babaaac 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/board/AbstractDMISystemSlots.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/board/DMISystemSlots.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.util.List;
@@ -24,26 +26,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMISystemSlots slot = new DMISystemSlots.Builder()
- * .designation("PCIEX16")
- * .type("PCI Express")
- * .currentUsage("In Use")
- * .busAddress("0000:01:00.0")
- * .build();
- *
- * // Create a modified copy
- * DMISystemSlots updated = slot
- * .withCurrentUsage("Available");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMISystemSlots {
+@JsonSerialize(as = ImmutableDMISystemSlots.class)
+@JsonDeserialize(as = ImmutableDMISystemSlots.class)
+public abstract class DMISystemSlots {
@JsonProperty("Designation")
@Nullable
@@ -73,8 +63,7 @@ public abstract class AbstractDMISystemSlots {
@Nullable
public abstract String busAddress();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIMemoryDevice.java b/src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIMemoryDevice.java
similarity index 89%
rename from src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIMemoryDevice.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIMemoryDevice.java
index b448655..3f906f0 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIMemoryDevice.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIMemoryDevice.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of memory device information retrieved via DMI.
@@ -22,27 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIMemoryDevice memory = new DMIMemoryDevice.Builder()
- * .locator("DIMM_A1")
- * .size("16 GB")
- * .type("DDR4")
- * .speed("3200 MT/s")
- * .manufacturer("Samsung")
- * .build();
- *
- * // Create a modified copy
- * DMIMemoryDevice updated = memory
- * .withConfiguredMemorySpeed("2933 MT/s");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIMemoryDevice {
+@JsonSerialize(as = ImmutableDMIMemoryDevice.class)
+@JsonDeserialize(as = ImmutableDMIMemoryDevice.class)
+public abstract class DMIMemoryDevice {
@JsonProperty("Array Handle")
@Nullable
@@ -172,8 +161,7 @@ public abstract class AbstractDMIMemoryDevice {
@Nullable
public abstract String logicalSize();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIPhysicalMemoryArray.java b/src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIPhysicalMemoryArray.java
similarity index 75%
rename from src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIPhysicalMemoryArray.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIPhysicalMemoryArray.java
index a6b2204..d87397c 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/memory/AbstractDMIPhysicalMemoryArray.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/memory/DMIPhysicalMemoryArray.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of physical memory array information retrieved via DMI.
@@ -22,26 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIPhysicalMemoryArray array = new DMIPhysicalMemoryArray.Builder()
- * .location("System Board Or Motherboard")
- * .use("System Memory")
- * .maximumCapacity("128 GB")
- * .numberOfDevices(4)
- * .build();
- *
- * // Create a modified copy
- * DMIPhysicalMemoryArray updated = array
- * .withErrorCorrectionType("Multi-bit ECC");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIPhysicalMemoryArray {
+@JsonSerialize(as = ImmutableDMIPhysicalMemoryArray.class)
+@JsonDeserialize(as = ImmutableDMIPhysicalMemoryArray.class)
+public abstract class DMIPhysicalMemoryArray {
@JsonProperty("Location")
@Nullable
@@ -67,8 +57,7 @@ public abstract class AbstractDMIPhysicalMemoryArray {
@Nullable
public abstract Integer numberOfDevices();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/peripheral/AbstractDMIPortableBattery.java b/src/main/java/io/github/eggy03/dmidecode/entity/peripheral/DMIPortableBattery.java
similarity index 81%
rename from src/main/java/io/github/eggy03/dmidecode/entity/peripheral/AbstractDMIPortableBattery.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/peripheral/DMIPortableBattery.java
index 1bca010..73519a7 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/peripheral/AbstractDMIPortableBattery.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/peripheral/DMIPortableBattery.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of portable battery information retrieved via DMI.
@@ -22,26 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIPortableBattery battery = new DMIPortableBattery.Builder()
- * .location("Internal Battery")
- * .manufacturer("LG")
- * .designCapacity("50000 mWh")
- * .designVoltage("11.4 V")
- * .build();
- *
- * // Create a modified copy
- * DMIPortableBattery updated = battery
- * .withMaximumError("2%");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIPortableBattery {
+@JsonSerialize(as = ImmutableDMIPortableBattery.class)
+@JsonDeserialize(as = ImmutableDMIPortableBattery.class)
+public abstract class DMIPortableBattery {
@JsonProperty("Location")
@Nullable
@@ -87,8 +77,7 @@ public abstract class AbstractDMIPortableBattery {
@Nullable
public abstract String oemSpecificInformation();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMICache.java b/src/main/java/io/github/eggy03/dmidecode/entity/processor/DMICache.java
similarity index 82%
rename from src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMICache.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/processor/DMICache.java
index c50f1f5..33f6fc9 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMICache.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/processor/DMICache.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.util.List;
@@ -24,26 +26,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMICache cache = new DMICache.Builder()
- * .socketDesignation("L3-Cache")
- * .location("Internal")
- * .installedSize("32 MB")
- * .associativity("16-way Set-Associative")
- * .build();
- *
- * // Create a modified copy
- * DMICache updated = cache
- * .withInstalledSize("64 MB");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMICache {
+@JsonSerialize(as = ImmutableDMICache.class)
+@JsonDeserialize(as = ImmutableDMICache.class)
+public abstract class DMICache {
@JsonProperty("Socket Designation")
@Nullable
@@ -93,8 +83,7 @@ public abstract class AbstractDMICache {
@Nullable
public abstract String associativity();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMIProcessor.java b/src/main/java/io/github/eggy03/dmidecode/entity/processor/DMIProcessor.java
similarity index 85%
rename from src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMIProcessor.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/processor/DMIProcessor.java
index c5e3ee6..6b54778 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/processor/AbstractDMIProcessor.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/processor/DMIProcessor.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.util.List;
@@ -24,28 +26,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMIProcessor processor = new DMIProcessor.Builder()
- * .socketDesignation("CPU0")
- * .manufacturer("Intel")
- * .version("Intel(R) Core(TM) i7-12700H")
- * .coreCount(14)
- * .threadCount(20)
- * .currentSpeed("2700 MHz")
- * .build();
- *
- * // Create a modified copy
- * DMIProcessor updated = processor
- * .withCurrentSpeed("3900 MHz");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMIProcessor {
+@JsonSerialize(as = ImmutableDMIProcessor.class)
+@JsonDeserialize(as = ImmutableDMIProcessor.class)
+public abstract class DMIProcessor {
@JsonProperty("Socket Designation")
@Nullable
@@ -143,8 +131,7 @@ public abstract class AbstractDMIProcessor {
@Nullable
public abstract List<@Nullable String> characteristics();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/entity/system/AbstractDMISystem.java b/src/main/java/io/github/eggy03/dmidecode/entity/system/DMISystem.java
similarity index 78%
rename from src/main/java/io/github/eggy03/dmidecode/entity/system/AbstractDMISystem.java
rename to src/main/java/io/github/eggy03/dmidecode/entity/system/DMISystem.java
index 91081e8..5a06d93 100644
--- a/src/main/java/io/github/eggy03/dmidecode/entity/system/AbstractDMISystem.java
+++ b/src/main/java/io/github/eggy03/dmidecode/entity/system/DMISystem.java
@@ -11,6 +11,8 @@
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.annotation.JsonDeserialize;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Immutable representation of system information retrieved via DMI.
@@ -22,26 +24,14 @@
* Instances of this class are thread-safe.
*
*
- * {@code
- * DMISystem system = new DMISystem.Builder()
- * .manufacturer("LENOVO")
- * .productName("ThinkPad T14 Gen 3")
- * .serialNumber("PF123ABC")
- * .uuid("4C4C4544-0038-4D10-8051-CAC04F4A1234")
- * .build();
- *
- * // Create a modified copy
- * DMISystem updated = system
- * .withSkuNumber("21CFCTO1WW");
- * }
- *
* @since 0.2.0
*/
@Value.Immutable
@ImmutableEntityStyle
@NullMarked
-public abstract class AbstractDMISystem {
+@JsonSerialize(as = ImmutableDMISystem.class)
+@JsonDeserialize(as = ImmutableDMISystem.class)
+public abstract class DMISystem {
@JsonProperty("Manufacturer")
@Nullable
@@ -75,8 +65,7 @@ public abstract class AbstractDMISystem {
@Nullable
public abstract String family();
- @Override
- public String toString() {
+ public String toJson() {
return new ObjectMapper()
.writerWithDefaultPrettyPrinter()
.writeValueAsString(this);
diff --git a/src/main/java/io/github/eggy03/dmidecode/mapper/CommonDMIMapper.java b/src/main/java/io/github/eggy03/dmidecode/mapper/CommonDMIMapper.java
index 94e0b2e..b6ddd9c 100644
--- a/src/main/java/io/github/eggy03/dmidecode/mapper/CommonDMIMapper.java
+++ b/src/main/java/io/github/eggy03/dmidecode/mapper/CommonDMIMapper.java
@@ -89,8 +89,7 @@ public interface CommonDMIMapper