tauri-plugin-serialplugin 2.22.0

Access the current process of your Tauri application.
package app.tauri.serialplugin.manager

import java.io.ByteArrayOutputStream

/**
 * Thread-safe byte buffer for coalescing serial chunks before emitting to JS.
 * Pure JVM logic — unit-testable without Robolectric.
 */
internal class SerialByteAccumulator {
    private val lock = Any()
    private val stream = ByteArrayOutputStream()

    fun append(data: ByteArray) {
        if (data.isEmpty()) return
        synchronized(lock) {
            stream.write(data)
        }
    }

    /**
     * Returns all accumulated bytes and clears the buffer.
     * Returns an empty array if nothing was pending.
     */
    fun drain(): ByteArray {
        synchronized(lock) {
            if (stream.size() == 0) return ByteArray(0)
            val b = stream.toByteArray()
            stream.reset()
            return b
        }
    }

    fun pendingByteCount(): Int = synchronized(lock) { stream.size() }
}