// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecord.java
// public interface HttpRequestRecord {
// 
//     String getId();
// 
//     Date getTimestamp();
// 
//     String getGroupName();
// 
//     String getUri();
// 
//     HttpRequestMethod getMethod();
// 
//     List<HttpRequestHeader> getHeaders();
// 
//     HttpRequestPayload getPayload();
// 
//     Builder toBuilder();
// 
//     interface Builder {
// 
//         Builder setId(String id);
// 
//         Builder setTimestamp(Date timestamp);
// 
//         Builder setGroupName(String groupName);
// 
//         Builder setUri(String uri);
// 
//         Builder setMethod(HttpRequestMethod method);
// 
//         Builder setHeaders(List<HttpRequestHeader> headers);
// 
//         Builder setPayload(HttpRequestPayload payload);
// 
//         HttpRequestRecord build();
// 
//     }
// 
// }
// 
// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecordReader.java
// public interface HttpRequestRecordReader<T> {
// 
//     HttpRequestRecordReaderSource<T> getSource();
// 
//     Iterable<HttpRequestRecord> read();
// 
// }
// 
// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecordReaderSource.java
// public interface HttpRequestRecordReaderSource<T> extends Closeable {
// 
//     @Nullable
//     T read();
// 
// }


import com.vlkan.hrrs.api.HttpRequestRecord;
import com.vlkan.hrrs.api.HttpRequestRecordReader;
import com.vlkan.hrrs.api.HttpRequestRecordReaderSource;
import static com.google.common.base.Preconditions.checkNotNull;
package com.vlkan.hrrs.serializer.base64;



public class Base64HttpRequestRecordReader implements HttpRequestRecordReader<String> {

    private final HttpRequestRecordReaderSource<String> source;

    private final Base64Decoder decoder;

    public Base64HttpRequestRecordReader(HttpRequestRecordReaderSource<String> source, Base64Decoder decoder) {
        this.source = checkNotNull(source, "source");
        this.decoder = checkNotNull(decoder, "decoder");
    }

    @Override
    public HttpRequestRecordReaderSource<String> getSource() {
        return source;
    }

    @Override
// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecord.java
// public interface HttpRequestRecord {
// 
//     String getId();
// 
//     Date getTimestamp();
// 
//     String getGroupName();
// 
//     String getUri();
// 
//     HttpRequestMethod getMethod();
// 
//     List<HttpRequestHeader> getHeaders();
// 
//     HttpRequestPayload getPayload();
// 
//     Builder toBuilder();
// 
//     interface Builder {
// 
//         Builder setId(String id);
// 
//         Builder setTimestamp(Date timestamp);
// 
//         Builder setGroupName(String groupName);
// 
//         Builder setUri(String uri);
// 
//         Builder setMethod(HttpRequestMethod method);
// 
//         Builder setHeaders(List<HttpRequestHeader> headers);
// 
//         Builder setPayload(HttpRequestPayload payload);
// 
//         HttpRequestRecord build();
// 
//     }
// 
// }
// 
// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecordReader.java
// public interface HttpRequestRecordReader<T> {
// 
//     HttpRequestRecordReaderSource<T> getSource();
// 
//     Iterable<HttpRequestRecord> read();
// 
// }
// 
// Path: api/src/main/java/com/vlkan/hrrs/api/HttpRequestRecordReaderSource.java
// public interface HttpRequestRecordReaderSource<T> extends Closeable {
// 
//     @Nullable
//     T read();
// 
// }


// Path: serializer-base64/src/main/java/com/vlkan/hrrs/serializer/base64/Base64HttpRequestRecordReader.java
import com.vlkan.hrrs.api.HttpRequestRecord;
import com.vlkan.hrrs.api.HttpRequestRecordReader;
import com.vlkan.hrrs.api.HttpRequestRecordReaderSource;
import static com.google.common.base.Preconditions.checkNotNull;

package com.vlkan.hrrs.serializer.base64;



public class Base64HttpRequestRecordReader implements HttpRequestRecordReader<String> {

    private final HttpRequestRecordReaderSource<String> source;

    private final Base64Decoder decoder;

    public Base64HttpRequestRecordReader(HttpRequestRecordReaderSource<String> source, Base64Decoder decoder) {
        this.source = checkNotNull(source, "source");
        this.decoder = checkNotNull(decoder, "decoder");
    }

    @Override
    public HttpRequestRecordReaderSource<String> getSource() {
        return source;
    }

    @Override
    public Iterable<HttpRequestRecord> read() {