mirror of
https://codeberg.org/PGPainless/sop-java.git
synced 2024-09-27 18:49:31 +02:00
42 lines
1.4 KiB
Kotlin
42 lines
1.4 KiB
Kotlin
|
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||
|
//
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package sop
|
||
|
|
||
|
import java.io.ByteArrayOutputStream
|
||
|
import java.io.IOException
|
||
|
import java.io.OutputStream
|
||
|
import sop.exception.SOPGPException
|
||
|
|
||
|
abstract class ReadyWithResult<T> {
|
||
|
|
||
|
/**
|
||
|
* Write the data e.g. decrypted plaintext to the provided output stream and return the result
|
||
|
* of the processing operation.
|
||
|
*
|
||
|
* @param outputStream output stream
|
||
|
* @return result, eg. signatures
|
||
|
* @throws IOException in case of an IO error
|
||
|
* @throws SOPGPException in case of a SOP protocol error
|
||
|
*/
|
||
|
@Throws(IOException::class, SOPGPException::class)
|
||
|
abstract fun writeTo(outputStream: OutputStream): T
|
||
|
|
||
|
/**
|
||
|
* Return the data as a [ByteArrayAndResult]. Calling [ByteArrayAndResult.bytes] will give you
|
||
|
* access to the data as byte array, while [ByteArrayAndResult.result] will grant access to the
|
||
|
* appended result.
|
||
|
*
|
||
|
* @return byte array and result
|
||
|
* @throws IOException in case of an IO error
|
||
|
* @throws SOPGPException.NoSignature if there are no valid signatures found
|
||
|
*/
|
||
|
@Throws(IOException::class, SOPGPException::class)
|
||
|
fun toByteArrayAndResult() =
|
||
|
ByteArrayOutputStream().let {
|
||
|
val result = writeTo(it)
|
||
|
ByteArrayAndResult(it.toByteArray(), result)
|
||
|
}
|
||
|
}
|