# PARTs Subsystem

### Explanation & History
<!-- I wonder if there's a better way to format this without having to make the whole box shape which takes time without a table generator tool. -->
| <center>🔎 Keep in Mind<center/> |
|---|
| This includes IPARTsSubsystem as it acts as the recipe for the subsystem. |

We have all these tools that we use but now we run in the issue of repeating all this code just to use them. We also want a good custom logging and telemetry solution. This is what inspired us to make our custom subsystem too.

With that, our subsystem currently features:
- Telemetry
- Logging
- Stop
- Reset

We included both stop and reset features for convenience and simplicity. 

### Code Example
Please note that the PARTs Subsystem is meant to be extended, not used directly.
```java
package;

// Import the subsystem so we can extend it.
import org.parts3492.partslib.command.PARTsSubsystem;

public class MySubsystem extends PARTsSubsystem {

    private boolean publishTelemetry = true;
    private boolean enableLogging = true;

    // My awesome logged string.
    public String myAwesomeString = "Hello world!";
    
    public MySubsystem() {
        super();
    }

    @Override
    public void outputTelemetry() {
        partsNT.putString("My Awesome Telemetry", myAwesomeString, publishTelemetry);
    }

    @Override
    public void stop() {
        // Stop the logging and telemetry since the subsystem is stopped.
        publishTelemetry = false;
        enableLogging = false;

    }

    @Override
    public void reset() {
        // Reset the telemetry and logging to be published again when we reset the subsystem.
        publishTelemetry = true;
        enableLogging = true;
    }

    @Override
    public void log() {
        // Log our string.     The log name.    The log value.   Whether to log or not.
        partsLogger.logString("My Awesome Log", myAwesomeString, enableLogging);
    }   
}
```