class NativeLibraryImpl implements NativeLibrary, Serializable {

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        NativeLibraryImpl that = (NativeLibraryImpl) o;
        return Objects.equals(name, that.name) &&
                Objects.equals(toolchainName, that.toolchainName) &&
                Objects.equals(abi, that.abi) &&
                Objects.equals(cIncludeDirs, that.cIncludeDirs) &&
                Objects.equals(cppIncludeDirs, that.cppIncludeDirs) &&
                Objects.equals(cSystemIncludeDirs, that.cSystemIncludeDirs) &&
                Objects.equals(cppSystemIncludeDirs, that.cppSystemIncludeDirs) &&
                Objects.equals(cDefines, that.cDefines) &&
                Objects.equals(cppDefines, that.cppDefines) &&
                Objects.equals(cCompilerFlags, that.cCompilerFlags) &&
                Objects.equals(cppCompilerFlags, that.cppCompilerFlags) &&
                Objects.equals(debuggableLibraryFolders, that.debuggableLibraryFolders);
    }

    public  NativeLibraryImpl(
            @NonNull String name,
            @NonNull String toolchainName,
            @NonNull String abi,
            @NonNull List<File> cIncludeDirs,
            @NonNull List<File> cppIncludeDirs,
            @NonNull List<File> cSystemIncludeDirs,
            @NonNull List<File> cppSystemIncludeDirs,
            @NonNull List<String> cDefines,
            @NonNull List<String> cppDefines,
            @NonNull List<String> cCompilerFlags,
            @NonNull List<String> cppCompilerFlags,
            @NonNull List<File> debuggableLibraryFolders);

}