From 1e7449a839bb86f41620c069283ce9287f085cb0 Mon Sep 17 00:00:00 2001
From: Egg-03 <111327101+eggy03@users.noreply.github.com>
Date: Mon, 20 Apr 2026 20:53:07 +0530
Subject: [PATCH 1/5] refactor(dmidecode): remove replacement note
- Couldn't find if --json flag could actually make it to release in dmidecode
Signed-off-by: Egg-03 <111327101+eggy03@users.noreply.github.com>
---
.../io/github/eggy03/dmidecode/mapper/CommonDMIMapper.java | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
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 {
@FragileMethod(
type = MethodType.INTERFACE_DEFAULT_METHOD,
reason = "Parsing formatted human readable dmidecode output is always error-prone and subject to change without notice",
- requiresReplacement = true,
- replacementNote = "Consider using --json flag of dmidecode if available"
+ requiresReplacement = true
)
default @NonNull Optional mapToEntity(@Nullable String rawDMIData, @NonNull Class mappableEntityClass) {
@@ -191,8 +190,7 @@ public interface CommonDMIMapper {
@FragileMethod(
type = MethodType.INTERFACE_DEFAULT_METHOD,
reason = "Parsing formatted human readable dmidecode output is always error-prone and subject to change without notice",
- requiresReplacement = true,
- replacementNote = "Consider using --json flag of dmidecode if available"
+ requiresReplacement = true
)
default @NonNull @Unmodifiable List mapToList(@Nullable String rawDMIData, @NonNull Class mappableEntityClass) {
From 7af11a820f6065e444671b21011befd58326b53a Mon Sep 17 00:00:00 2001
From: Egg-03 <111327101+eggy03@users.noreply.github.com>
Date: Mon, 20 Apr 2026 21:25:13 +0530
Subject: [PATCH 2/5] refactor: update style
- Remove `@JsonSerialize` annotation as it will be applied individually on entity classes.
- Modify `typeAbstract` style to remove the "Abstract" prefix, allowing for cleaner abstract class naming.
- Update `typeImmutable` style to add an "Immutable" prefix to generated immutable types.
- The current setup leaks the implementations to the public API by default. While mappers need concrete implementation during serialization and deserialization, the final reference must be held by the abstract class itself.
- This update to style will allow the abstract classes to have names starting with DMI*, while serialization and deserialization will happen in the mapping layer, with the implemented classes, but they will retain the references of their abstract counterparts which will be returned.
Signed-off-by: Egg-03 <111327101+eggy03@users.noreply.github.com>
---
.../eggy03/dmidecode/annotation/ImmutableEntityStyle.java | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
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. From 3b0dec149f2dbb671a72e680f0d202396bd2c441 Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+eggy03@users.noreply.github.com> Date: Tue, 21 Apr 2026 08:57:02 +0530 Subject: [PATCH 3/5] refactor(entity): rename abstract DMI entity classes and add JSON annotations - Rename abstract DMI entity classes to their concrete counterparts (e.g., `AbstractDMIProcessor` to `DMIProcessor`). - Add manual `@JsonSerialize` and `@JsonDeserialize` annotations to the renamed classes to specify the immutable implementation for Jackson serialization/deserialization. - Remove example builder code blocks from Javadoc comments as they are no longer relevant to abstract classes. Signed-off-by: Egg-03 <111327101+eggy03@users.noreply.github.com> --- .../{AbstractDMIBIOS.java => DMIBIOS.java} | 19 +++++----------- ...BIOSLanguage.java => DMIBIOSLanguage.java} | 18 +++++---------- ...actDMIBaseboard.java => DMIBaseboard.java} | 20 +++++------------ ...bstractDMIChassis.java => DMIChassis.java} | 19 +++++----------- ....java => DMIPortConnectorInformation.java} | 19 +++++----------- ...MISystemSlots.java => DMISystemSlots.java} | 20 +++++------------ ...MemoryDevice.java => DMIMemoryDevice.java} | 21 +++++------------- ...Array.java => DMIPhysicalMemoryArray.java} | 20 +++++------------ ...leBattery.java => DMIPortableBattery.java} | 20 +++++------------ .../{AbstractDMICache.java => DMICache.java} | 20 +++++------------ ...actDMIProcessor.java => DMIProcessor.java} | 22 +++++-------------- ...{AbstractDMISystem.java => DMISystem.java} | 20 +++++------------ 12 files changed, 60 insertions(+), 178 deletions(-) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMIBIOS.java => DMIBIOS.java} (84%) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMIBIOSLanguage.java => DMIBIOSLanguage.java} (77%) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMIBaseboard.java => DMIBaseboard.java} (82%) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMIChassis.java => DMIChassis.java} (86%) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMIPortConnectorInformation.java => DMIPortConnectorInformation.java} (78%) rename src/main/java/io/github/eggy03/dmidecode/entity/board/{AbstractDMISystemSlots.java => DMISystemSlots.java} (80%) rename src/main/java/io/github/eggy03/dmidecode/entity/memory/{AbstractDMIMemoryDevice.java => DMIMemoryDevice.java} (90%) rename src/main/java/io/github/eggy03/dmidecode/entity/memory/{AbstractDMIPhysicalMemoryArray.java => DMIPhysicalMemoryArray.java} (77%) rename src/main/java/io/github/eggy03/dmidecode/entity/peripheral/{AbstractDMIPortableBattery.java => DMIPortableBattery.java} (82%) rename src/main/java/io/github/eggy03/dmidecode/entity/processor/{AbstractDMICache.java => DMICache.java} (84%) rename src/main/java/io/github/eggy03/dmidecode/entity/processor/{AbstractDMIProcessor.java => DMIProcessor.java} (87%) rename src/main/java/io/github/eggy03/dmidecode/entity/system/{AbstractDMISystem.java => DMISystem.java} (80%) 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 84% 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..18f80fb 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
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 77%
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..865f2f5 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
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 82%
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..4375cfa 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
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 86%
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..e068214 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
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 78%
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..5736918 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
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 80%
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..6aa64c1 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
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 90%
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..0d34634 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
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 77%
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..65a44fa 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
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 82%
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..5682403 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
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 84%
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..eae750c 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
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 87%
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..6621d6e 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
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 80%
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..50428cc 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
From e2859687db584055c5a7b67286ba61e79fabcd3f Mon Sep 17 00:00:00 2001
From: Egg-03 <111327101+eggy03@users.noreply.github.com>
Date: Tue, 21 Apr 2026 09:03:07 +0530
Subject: [PATCH 4/5] test: update tests to use immutable builders
- Replace usage of `Builder()` with `Immutable