class FetchStub implements Symbol {

    private final FetchMarker fetchMarker;
    private final Reference ref;

    /**
     * @param fetchMarker the _fetchId marker that must be used to fetch the value for the reference
     */
    public FetchStub(FetchMarker fetchMarker, Reference ref) {
        this.fetchMarker = fetchMarker;
        this.ref = ref;
    }

    public FetchMarker fetchMarker() {
        return fetchMarker;
    }

    public Reference ref() {
        return ref;
    }

    @Override
    public SymbolType symbolType() {
        return SymbolType.FETCH_STUB;
    }

    @Override
    public <C, R> R accept(SymbolVisitor<C, R> visitor, C context) {
        return visitor.visitFetchStub(this, context);
    }

    @Override
    public DataType<?> valueType() {
        return ref.valueType();
    }

    @Override
    public String toString() {
        return toString(Style.UNQUALIFIED);
    }

    @Override
    public String toString(Style style) {
        return ref.toString(style);
    }

    @Override
    public void writeTo(StreamOutput out) throws IOException {<FILL_FUNCTION_BODY>}

    @Override
    public long ramBytesUsed() {
        return ref.ramBytesUsed() + fetchMarker.ramBytesUsed();
    }
}

        throw new UnsupportedEncodingException(
            "Cannot stream FetchStub. This is a planning symbol and not suitable for the execution layer");
    
<no_super_class>