Kotlin conversion: ReadyWithResult

This commit is contained in:
Paul Schaub 2023-10-31 13:23:26 +01:00
parent e6562cecff
commit a89e70c19e
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 41 additions and 41 deletions

View file

@ -1,41 +0,0 @@
// SPDX-FileCopyrightText: 2021 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;
public 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.NoSignature if there are no valid signatures found
*/
public abstract T writeTo(OutputStream outputStream) throws IOException, SOPGPException.NoSignature;
/**
* Return the data as a {@link ByteArrayAndResult}.
* Calling {@link ByteArrayAndResult#getBytes()} will give you access to the data as byte array, while
* {@link ByteArrayAndResult#getResult()} 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
*/
public ByteArrayAndResult<T> toByteArrayAndResult() throws IOException, SOPGPException.NoSignature {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
T result = writeTo(bytes);
return new ByteArrayAndResult<>(bytes.toByteArray(), result);
}
}

View file

@ -0,0 +1,41 @@
// 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)
}
}