diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..2d56834
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,21 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+Provide code examples if possible, names of affected classes, etc...
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Goals and expected behavior**
+A clear and concise description of what you expected to happen. What are your goals?
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1ea9608
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,42 @@
+# Contributing to SerialX
+
+First off, thank you for considering contributing to this project. It's people like you that make this project even better!
+
+## How Can I Contribute?
+
+### Reporting Bugs
+
+- **Ensure the bug was not already reported** by searching through [Issues section](https://github.com/PetoPetko/Java-SerialX/issues).
+- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/PetoPetko/Java-SerialX/issues/new).
+ - Make sure that the issue contains decent description and if possible some additional data as well, such as code examples. This can help to better understand the issue or ease the reproduction process.
+
+### Your First Code Contribution
+
+- Fork the repo.
+- Windows only: Download [Git bash x64](https://git-scm.com/download/) if you do not have it already.
+- Open bash/git bash then run the following command and write in your GitHub account name (SimplyProgrammer in my case). This command should properly clone your forked SerialX repo:
+```
+read -p "Enter your GitHub account name: " name && mkdir -p SerialX && cd "$_" &&
+git clone --single-branch --branch dev "https://github.com/$name/Java-SerialX.git" SerialXDev &&
+git clone --single-branch --branch tests-and-experimental-features "https://github.com/$name/Java-SerialX.git" SerialXTest
+```
+- Import both SerialXDev and SerialXTest together with all of their modules into your editor of choice, I recommend Eclipse.
+- Make some changes (add something feature, fix some bugs, improve Javadocs...)
+- Go to SerialXTest and run `examples.implementations.GeneralExample`, `examples.implementations.SimpleQuerying` and `examples.implementations.SerializingWithJson` junit tests. Acknowledge that only changes that meet all the tests can be added to the library!
+- If all the tests are green you can `git add .`
+- Commit your changes (`git commit -am 'describe what you have done (adding/fixing/improving/... something)'`).
+- Push to the branch (`git push`).
+- When you are done, open a new Pull Request.
+
+## Styleguides and code requirements
+- Follow general Java conventions.
+- Introduce as few boundaries as possible, try making things as universal as possible (do not use final or private if possible).
+- Try for your code to not stick out stylistically ;)
+- Every added feature must have an outreaching purpose, must be tested, and perform reasonably.
+ - Make sure to NOT alter any of the tests unless your use case explicitly requires it, in that case, make sure to document it!
+- Every added class and method must be documented (/** doc */) and contain @author and @version. Method does not need to have @author, especially @author of the class is the same.
+- Note: Version does not have to be incremented in any way, adding _SNAPSHOT at the end should be sufficient.
+
+## Additional
+
+Thank you for contributing to SerialX!
diff --git a/Changelog.md b/Changelog.md
index ea4becb..b20910e 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -93,11 +93,11 @@ What was added:
* SelfSerializable interface which gives you ability to serialize objects without protocol by calling public constructors!
* Static field "new" to obtain clone of variable and "class" to obtain class of variables value!
* 4 new protocols:
-* * MapProtocol - to serialize maps!
-* * ScopeProtocol (reading only) to read scopes using protocol!
-* * AutoProtocol - will automatically serialize selected fields with getters and setters!
-* * EnumProtocol - to serialize any java enum!
-* * SelfSerializableProtocol - operates with SelfSerializable interface!
+ * MapProtocol - to serialize maps!
+ * ScopeProtocol (reading only) to read scopes using protocol!
+ * AutoProtocol - will automatically serialize selected fields with getters and setters!
+ * EnumProtocol - to serialize any java enum!
+ * SelfSerializableProtocol - operates with SelfSerializable interface!
* Tremendous writing performance boost! Large quantity writing is now up to 80x faster than in previous version.
* Eliminating usage of Regex completely which results into even faster reading!
* Now you can access variables of scopes by "." directly in SerialX!
@@ -165,8 +165,8 @@ Release date: 10.25.2021 (Morning)
What was added:
* Serializer now abstract class which inherits Scope so now it is Scope that can serialize itself! Serialization and deserialization methods are now not static and original functionality has been split into two separated objects that inherit Serializer:
- * JussSerializer - which is responsible for serializing and deserializing objects using Juss format (original functionality of Serializer).
- * JsonSerializer - which is responsible for serializing and deserializing objects using Json format (successors of JsonSelxUtils)
+ * JussSerializer - which is responsible for serializing and deserializing objects using Juss format (original functionality of Serializer).
+ * JsonSerializer - which is responsible for serializing and deserializing objects using Json format (successors of JsonSelxUtils)
* JsonSelxUtils was replaced with JsonSerializer that is capable of both reading and writing Json!
* Main formatting and reading algorithms can be now overridden by extending JsonSerializer, JussSerializer or Serializer!
* Ability to set multiple variables on one value, for example x = y = z = 5
@@ -180,3 +180,134 @@ What was added:
* Package name was renamed from "ugp.org.SerialX" to "org.ugp.serialx"!
* Fixing some bugs with formatting and reading!
#
+
+# SerialX 1.3.5
+
+Release date: 8.30.2022 (Night)
+
+What was added:
+* Scope was split into 2 separate classes:
+ * GenericScope - that allows you to set generic types of keys and values. Furthermore, it can be serialized with generic types preserved!
+ * Scope - that you already know which poses the same functionality as before now as a child class of GenericScope!
+* Imports system was redesigned and splitted into multiple separate classes, each handling some part of functionality!
+ * Also imports are now Serializer specific rather than global!
+* Precedence of ConditionalAssignmentOperators ?: and ?? was slightly altered to closely resemble behavior of these operators in other languages. Also, these operators now can be nested without necessity of ().
+* Parser API (DataParser and DataConverter) was redesigned and is now handled by ParserRegistry which can provide additional functionality such as caching to improve performance!
+* Serialization syntax of Serializable objects using Base64 via SerializableBase64Converter was slightly altered to mitigate conflicts with the rest of JUSS syntax!
+* New "from/into API" which is now part of the Scope that allows you to map almost any java object into a scope and any scope into corresponding java object!
+* AutoProtocol is now based on "from/into API" making it more flexible!
+* New UniversalObjectInstantiationProtocol that can deserialize any object by calling its constructor (something similar to ObjectClass::new)!
+* SerializationProtocols now have a "mode" that can define what they can do!
+* JsonSerializer will now serialize JUSS protocols as JSON objects to achieve more JSON compatibility out of the box!
+* LogProvider which is now responsible for logging errors and allows you to implement your own form of logging!
+* SerializationDebugger that provides ability to debug serialization and deserialization!
+* New utility across API and small new functionalities and changes!
+* Fixing bugs (hopefully not adding new ones):
+ * Long live bug with // and /* comments in strings now fixed for good (I hope...)
+ * Bug with wrong formatting when serializing Json in Juss and revers!
+ * Some other small ones!
+* New examples were added!
+#
+
+# SerialX 1.3.8
+
+Release date: 9.22.2024 (Night)
+
+What was added:
+### Maven:
+* The whole library was modularized using Maven into the following modules:
+ * SerialX-core - Contains core features and utilities shared across the library. It also contains basic protocols and parsers that resemble the functionalities of pre-1.2.X SerialX.
+ * SerialX-juss - Now contains everything JUSS related, features that were added roughly in 1.2 and later... This includes things like JussSerializer, ArrayConverter, OperationGroups etc...
+ * SerialX-json - A relatively small extension of the JUSS module that is more narrowly focused on JSON. This is now where SerialX support for JSON is located.
+ * SerialX-operators - An extensional module, this is now where all operator parsers are located.
+ * SerialX-devtools - Small module containing tools for debugging the library, mainly Parser/Converter API. It is intended for DSL developers and people who want to add their own data formats.
+* From now on Maven will be used for dependency management and building of this library.
+* Distribution of this library will be conducted using Maven from now on.
+ * This greatly simplifies a lot of lengthy, complex IDE-specific processes.
+
+### Unit tests and benchmarks:
+* Some examples are now used as unit tests, this should greatly simplify the testing process and reduce the chance of bug introduction in the future.
+* These are now located on the new "tests-and-experimental-features" branch. This branch will be used for demonstrations, benchmarking, testing and experimenting. Note that this branch is not part of the main API.
+
+
+
+### Specific changes:
+* Library is now compatible with JDK versions up to 21 (probably even newer but it was not tested)!
+* ImportsProvider now implements caching for Imports.
+* ParserRegistry now implements DataParser allowing for easier creation of more complex (context-free) languages.
+* NumberConverter was refactored, now providing all in one parsing numberOf function that is on average 12x faster than the old implementation.
+ * New numberOf function supports octadecimal numbers and has improved handling of E-notation.
+ * Java integer caching is now in place.
+ * DecimalFormater was dumped in favor of the more customizable overridable format method.
+* BooleanConverter and NullConverter were slightly refactored allowing for near O(1) complexity of parsing.
+* ObjectConverter got a significant refactor!
+ * It was separated into 2 separate classes across 2 modules. Now it is ProtocolConverter that is extended by ObjectConverter.
+ * Static member invocation is now only allowed on a small carefully selected group of classes, fixing the major security (arbitrary code execution) exploit that would allow an attacker to call any static function of any class in a hypothetical REST implementation scenario. Note that this is only a mitigation that allows you to whitelist the specific classes for static member invocation so the maximal caution is still advised when doing so.
+ * Both ObjectConverter and ProtocolConverter were slightly optimized.
+* StringConverter was slightly optimized by introducing caching. It is disabled by default, by enabling it the same String instance will be returned for the same strings during parsing.
+ * Static variables were made instance-specific allowing for more flexibility.
+* GenericScope and Scope received various API improvements, the most notable ones being:
+ * GenericScope now implements Collection instead of just Iterable making it part of Java collection API.
+ * From/Into API now partially supports recognition for generic types of declared Object variables, making it more useful for non-JUSS formats such as JSON. This enhances also AutoProtocol and UniversalObjectInstantiationProtocol together with SelfSerializableProtocol.
+* Mode of SerializationProtocol is now implemented with 64 int (long) bit-packing which allows for chaining of multiple modes which can now be understood as protocol types. This trades an overall number of unique modes for greater utility.
+* Serializer (and core high-level changes):
+ * The concept of scope parent variable inheritance was abandoned due to being unacceptable and inefficient (both time and space-wise...), quite error-prone and tedious to work with as well as and potentially dangerous. Not mentioning the fact that the only reason for its existence was to allow you to access variables declared in the parent scope, for which it suboptimal solution to say at least...
+ * In a similar fashion, the notion of each parser having to return the new instance of the respective object for every parsed string was abandoned as well and is no longer required, allowing for more flexibility and concepts such as already mentioned caching!
+ * OOP NULL was abandoned as well as it was a biproduct of sub-optimal decisions mentioned above and therefore conceptually flawed. It is deprecated and should not be used!
+* All static utility functions (for instance string analyses and processing functions) were separated into new Utils class, in order to achieve better separation of concerns...
+ * All string analyses and processing utility functions (for example indexOfNotInObj or splitValues) were rewritten into more "finite state machine"-like form which slightly increases their performance...
+ * Some new utility functions were added and existing ones were improved!
+
+
+* Operation group mark of OperationGroups (parentheses operator) is no longer static and always the same, now it is shorter and pseudo-randomly generated which slightly increases the performance and highly mitigates the hypothetical "Group mark injection" attack which would result in unauthorized access to group mark at runtime.
+* UniversalObjectInstantiationProtocol is no longer registered by default and now requires manual registration for a specific class, this enhances security since instantiation of any object (dangerous or not) is prevented.
+ * The same goes for SelfSerializableProtocol.
+
+
+* JsonSerializer received many improvements and bug fixes in order to match JSON more accurately.
+ * Dedicated JsonCharacterConverter and JsonNumberConverter were added for this. Also, JsonObjectConverter was separated into its own class.
+
+
+* Operators class was added, which is used for injecting all operator parsers into the specific registry.
+* Almost every operator parser was refactored, resulting in shorter, far simpler and therefore more optimized code. The most notable ones are:
+ * ArithmeticOperators which now also allows you to declare your own arithmetic operators and/or specify their precedence.
+ * Due to refactoring, ResultWrapper is no longer needed and will be removed, this extends to LogicalOperators as well.
+* NegationOperator now supports separate handling of logical negation (! operator) and mathematical negation (- operator), however by default their behavior is the same.
+
+
+* The ability to specify custom output PrintWriter was added for SerializationDebugger.
+
+
+* Besides the changes mentioned above, countless smaller improvements including numerous bug fixes, performance improvements, API enhancements or Javadoc specifications were added across the whole library.
+ * Some functions were slightly renamed but it is usually documented but deprecated functions were removed!
+#
+
+# SerialX 1.3.9
+
+Release date: July
+
+### Notable changes:
+* A new, far performant, reading and lexing method was written for parsing, resulting in almost 2x improvement when deserializing a large amount of data.
+* Serializer now provides an option to implement a custom code formatting flag, including the option to disable formatting entirely (so no indentation or new line blank characters will be present).
+ *
+* Key Serializer methods, LoadFrom and SerializeTo were renamed to camel case (original PascalCase was largely a legacy thing...).
+* JsonVariableConverter was added as JSON-specific variant of VariableConverter.
+* ArrayConverter now supports proper serializing of 0 and 1 length arrays (@ identifier for arrays).
+* Slight default formatting changes (';' is no longer used for the last element, similarly to JSON).
+* Other smaller optimizations and API improvements.
+ * hashCode for GenericScope
+ * Deprecations were removed...
+ * More Unit/Integration tests...
+* Minor bug fixes.
+
+# SerialX 1.4.0
+
+Release date: ???
+
+### Roadmap of potential changes:
+* Separating From/Into API from Scope and Serializer into the standalone classes making it more flexible and customizable.
+* ? Implementing Register in such a way that it will be possible to specify the underlying data structure.
+* ? ParserProvider, ProtocolProvider, MultimediaSerializer interfaces...
+* ? Optimizations - Introducing char/class-based direct dispatch hashing algorithm for selecting the best fitting data converter for the string/object. (This is likely not going to be possible to fully implement due to internal dependencies between parsers and other legacy reasons...)
+* ? Java 11
+
diff --git a/LICENSE b/LICENSE
index 7212173..a10452e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
Based on MIT License
-Copyright (c) USP 2019-2020 | Peto
+Copyright (c) USP 2019-2024 | Peto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated files, to deal
@@ -8,8 +8,10 @@ in the Software without restriction, including without limitation the rights
to use, copy or modify copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
-Permission to publish, distribute, sublicense or sell for example as content of some game or application is allowed
-subject to the following conditions: Indication of the original source (https://github.com/PetoPetko/Java-SerialX/).
+Permission to re-publish, re-distribute, sublicense or sell any code contained in this repository (for example as a direct part of your game or application) under your own trademark is PROHIBITED unless the following conditions are met:
+- Indication/pointing to the original source (https://github.com/PetoPetko/Java-SerialX/).
+The above does not apply if, and only if your project (game/application/etc.) is depended on the "jar file" form of this library.
+Any other situation MUST follow the conditions stated above!
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software!
diff --git a/README.md b/README.md
index 1e7ec52..2459869 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,49 @@
# Java-SerialX
-SerialX is a powerful utility library to serialize objects in Java. Serialization means storing Java objects and values into file.
-SerialX is improving regular Java Base64 serialization and adding serialization protocols that you can create for objects that cant be serialized using regular way. For example final non-serializable objects, 3rd party objects and others. SerialX API is storing objects into JSON like "programming" language (data format) called JUSS (Java universal serial script) which shares common functionality with JSON and provides more customizability and extended functionality! This allows you to serialize multiple objects into one string or also into file. But unlike to JSON, JUSS general conception is based on determinate order of arguments or values we can say. Latest versions also provides variable system (keys, values) similar to JSON. But in JUSS these variables can be overided and can interact with each other and can be used multiple times. Nowadays SerialX provides recursive descent parser that can be modified so you can create your own data structures! In other words SerialX allows you to serialize **anything**, it's pretty simple to use and practically limitless!
+## Quick links
+* If you want to download/import the library, add this to your pom.xml. Or take a look at [Packages](https://github.com/SimplyProgrammer?tab=packages&repo_name=Java-SerialX).
+```
+
+
+ org.ugp.serialx
+ serialx-json
+ 1.3.8
+
+
+
+
+
+ github
+ https://maven.pkg.github.com/SimplyProgrammer/Java-SerialX
+
+
+```
+
+* If you want to add or see issues just click on [Issues section](https://github.com/PetoPetko/Java-SerialX/issues) in up.
+* If you want to comment or suggest a feature use [Discussions section](https://github.com/PetoPetko/Java-SerialX/discussions).
+* If you want to see or learn some things about library, take a look at [examples](https://github.com/SimplyProgrammer/Java-SerialX/tree/tests-and-experimental-features/src/examples).
+* And if you want to see the changelog, open [changelog file](Changelog.md) or use [Releases section](https://github.com/PetoPetko/Java-SerialX/releases) too.
+
+
+
+SerialX is powerful and lightweighted utility library to serialize objects in Java. Serialization means storing Java objects and values into some media (for example text file).
+SerialX is improving regular Java Base64 serialization and adding serialization protocols that you can create for objects that cant be serialized using regular way. For example final non-serializable objects, 3rd party objects and others. SerialX API is storing objects into JSON like "programming" language (data format) called JUSS (Java universal serial script) which shares common functionality with JSON and provides more customizability and extended functionality! This allows you to serialize multiple objects into one string or also into file. But unlike to JSON, JUSS general conception is based on determinate order of arguments or values we can say. The latest versions also provides variable system (keys, values) similar to JSON. But in JUSS these variables can be overided and can interact with each other and can be used multiple times. Nowadays SerialX provides recursive descent parser that can be modified so you can create your own data structures! In other words SerialX allows you to serialize **anything**, it's pretty simple to use and practically limitless!
## Brief overview of working concept and advantages compared to regular serialization:
-**Regular java serialization** is strongly based on some kind of "magic" or we can say "godly reflection" which will reflectivly read all fields of object includeing private and final ones and then interprets it as Base64 string. And during deserialization it will create an empty instance of object absolutly ignoring its constructors by using some "magic" compilator process to create it instad, and then it will violently write all serialized field again includeing private and final ones which is realy not the best aproach! Also this alows you to serialize only instances of java.io.Serializable and all field must be instances of Serializable as well which is also not the most usefull thing!
-Compare to this, **SerialX API** is doing everything programmatically. SerialX API uses ``SerializationProtocol``s that are registred in ``ProtocolRegistry``, each working for certain class! ``SerializationProtocol`` contains 2 methods, ``serialize(T object)`` and ``unserialize(Object[] args)``. ``serialize(T object)`` method obtains certain object to serialize and its job is to turn this object into array of objects that we can then reconstruct this exact object from, such as constructor arguments! These arguments are then paste into ``Serializer`` and ``Serializer`` serialize them into mentioned SerialX API data storage format. During deserialization, ``Serializer`` first takes givven data serialized in SerialX, unserialize them into array of objects and this array is then paste into ``unserialize(Object[] args)`` method of certain ``SerializationProtocol`` as argument. Job of ``unserialize(Object[] args)`` method is to create an new instance of serialized object ``T`` from givven arguments! Evrything in this function is controlled by you and you can write them by your self which gives you an absolute control!
-Note: Since 1.3.0, protocols are operated by DataParsers and are mainly used for more complex objects. Also Object -> String conversion is now done by DataConverter and String - Object is done by DataParsers and further by protocols!
+**Regular java serialization** is strongly based on some kind of "magic" or we can say "godly reflection" which will reflectivly read all fields of object including private and final ones and then interprets it as Base64 string. And during deserialization it will create an empty instance of object absolutely ignoring its constructors by using some "magic" compilator process to create it instad, and then it will violently write all serialized fields again including private and final ones which is realy not the best approach! Also, this allows you to serialize only instances of java.io.Serializable and all fields must be instances of Serializable as well which is also not the most useful thing!
+Compared to this, **SerialX API** is doing everything programmatically. SerialX API uses ``SerializationProtocol``s that are registered in ``ProtocolRegistry``, each working for certain class! ``SerializationProtocol`` contains 2 methods, ``serialize(T object)`` and ``unserialize(Object[] args)``. ``serialize(T object)`` method obtains certain object to serialize and its job is to turn this object into an array of objects that we can then reconstruct this exact object from, such as constructor arguments! These arguments are then paste into ``Serializer`` and ``Serializer`` serialize them into mentioned SerialX API data storage format. During deserialization, ``Serializer`` first takes given data serialized in SerialX, unserializes them into array of objects and this array is then paste into ``unserialize(Object[] args)`` method of certain ``SerializationProtocol`` as argument. The job of ``unserialize(Object[] args)`` method is to create an new instance of serialized object ``T`` from given arguments! Everything in this function is controlled by you and you can write them by yourself which gives you an absolute control!
+Note: Since 1.3.0, protocols are operated by DataParsers and are mainly used for more complex objects. Also Object to String conversion is now done by DataConverter and String - Object is done by DataParsers and further by protocols!
**Advantages and goals:**
* Overcoming most of regular serialization problems such as bypassing constructor!
-* Powerful and highly costomizable, you have control over stuff via protocols and recursive descent parser!
+* Powerful and highly costomizable/opinionated, you have control over stuff via protocols and recursive descent parser!
* Programmaticall, meaning you can decide how objects will be serialized and deserialized!
* Fast, SerialX solution is almost always far more faster than regular serialization!
* Readable, It depends but SerialX formats are supposed to be pretty readable for humans and should be also pretty intuitive for learning and writing!
-* Data types recognision, SerialX defaultly supports all primitve datatypes from java and also objects (done with protocols) compare to Json for instance!
+* Data types recognition, SerialX defaultly supports all primitive datatypes from Java and also objects (done with protocols) compare to Json for instance!
* Small storage requirements, as you can see belove SerialX is often times far smaller than Json not even mentioning XML!
* Quantity, SerialX can serialize multiple objects into one file or string!
-* Fully compatible with JSON!
-* Very easy to use, at the begining all what you need to know is ``Serializer.SerializeTo(file, objects)`` for serializing and ``Serializer.LoadFrom(file)`` for deserializing!
-* Recursive descent parser that is fully customizable and can be used to parse and convert potentialy anything from JSON to CSS!
+* Fully compatible and interoperable with JSON!
+* Very easy to use, at the beginning all what you need to know is ``JsonSerializer#SerializeTo(file, objects)`` for serializing and ``JsonSerializer#LoadFrom(file)`` for deserializing!
+* Recursive descent parser that is fully customizable and can be used to parse and convert potentially anything from JSON to CSS!
+* Lightweight, all modules combined under 150KB!
## Comparison: XML (.xml) vs Json (.json) vs YAML (.yml) vs JUSS (.juss or .srlx)
Sample object:
@@ -122,13 +149,7 @@ some.package.Foo {
flag = T
}
```
- Maybe it is a question of formating but JUSS with protocol will be the shortest one anyway. Because, in this case, instead of having some sort of key to the value you simply have its order (index)!
+ Maybe it is a question of formatting but JUSS with protocol will be the shortest one anyway. Because, in this case, instead of having some sort of key to the value you simply have its order (index)!
And value's data type is specified by suffix if it is a primitive data type or simply by package name as the first argument in case of an object! Other arguments (count, order, type) are then specified by a SerializationProtocol! Generally, one line means one object, one value (separated by spaces) means one argument!
Note: Since there is variable system in 1.1.5, the order of values is now not the only option to obtain an object or value!
-## Info
-* If you want to add or see issues just click on [Issues section](https://github.com/PetoPetko/Java-SerialX/issues) in up.
-* If you want to comment or suggest an feature use [Discussions section](https://github.com/PetoPetko/Java-SerialX/discussions).
-* If you want to see or learn some things about library then see the documentation or Sample Open Source Implementation.
-* If you want to download library, dont use commits section, use [Releases section](https://github.com/PetoPetko/Java-SerialX/releases) or click that big green button "Clone or download" to download the latest version.
-* And if you want to see changelog open [changelog file](Changelog.md) or use [Releases section](https://github.com/PetoPetko/Java-SerialX/releases) too.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..d24b2cb
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,18 @@
+# Security Policy
+
+## Versioning schema
+This project uses incremental X.Y.Z version numbers (XYZ are numbers from 0 to 9) where:
+* X = "Uber version", this is likely to stay 1 forever (and therefore is kind of useless). It is also quiet possible that numbers are going to be shifted 1 space towards the left for this exact reason.
+* Y = Major version. When this number is incremented it usually means something "revolutionary" was added, something that moved the library forward significantly. Moderate migration is likely to be required...
+* Z = Majnor version. Although it is called "minor", it can oftentimes be quiet big. The bigger the number difference between the last minor version, the bigger the update. But the library is usually compatible between minor version with minimal migration needed (deprecateds or changes are usually documented in the code...).
+
+## Supported Versions
+There are no LTS versions, except the current version. It is recommended to always use the latest version if possible as the old versions were slow, riddled with bugs and sometimes quite significant security vulnerabilities.
+Also is highly discouraged to use any "alpha", or "beta" versions.
+Using versions with _SNAPSHOT at the end is only recommended when it is the latest version available. Keep it mind that the correct functionality in these versions is not guaranteed and they should be updated to the latest (non _SNAPSHOT) version/release as soon as it becomes possible.
+
+## Reporting a Vulnerability
+
+Currently, there are no known vulnerabilities present in the library but still be wise with your code, mainly with creating protocols and parsers, if your work is security-focused!
+After all, and also unfortunately, this library has its history of security missteps so reporting potential vulnerability of any kind is encouraged (preferably without "spreading the word" too much).
+You can do so by using [Issues section](https://github.com/SimplyProgrammer/Java-SerialX/issues).
diff --git a/SerialX 1.3.2.jar b/SerialX 1.3.2.jar
deleted file mode 100644
index ceadaca..0000000
Binary files a/SerialX 1.3.2.jar and /dev/null differ
diff --git a/examples/Bar.java b/examples/Bar.java
deleted file mode 100644
index 2b05406..0000000
--- a/examples/Bar.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package examples;
-
-import java.util.List;
-
-public final class Bar extends Foo //Sample object that inheres
-{
- byte by0 = (byte) 142;
- short s0 = 555;
- double d2 = 5;
- Object sampleParent;
-
- @Override
- public String toString()
- {
- return "Bar[" + a + " " + b + " " + c + " " + d + " " + f + " " + ch + " " + s + " " + nah + " " + l + " " + by0 + " " + s0 + " " + sampleParent+"]";
- }
-
- public static class BarProtocol extends FooProtocol //Protocol to serialize Bar
- {
- @Override
- public Object[] serialize(Foo object)
- {
- return new Object[] {object.a, object.b, object.c, object.d, object.f, object.ch, object.s, object.nah, object.l, ((Bar) object).by0, ((Bar) object).s0, "${$parent}" /*If serialized with JussSerializer this will try to get value of parent property from certain scope!*/};
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Foo unserialize(Class extends Foo> objectClass, Object... args)
- {
- Bar f = new Bar();
- f.a = (int) args[0];
- f.b = (int) args[1];
- f.c = (int) args[2];
- f.d = (double) args[3];
- f.f = (float) args[4];
- f.ch = (char) args[5];
- f.s = (String) args[6];
- f.nah = (boolean) args[7];
- f.l = (List