### Question:
ResolvedFunction { public QualifiedName toQualifiedName() { byte[] json = SERIALIZE_JSON_CODEC.toJsonBytes(this); ZstdCompressor compressor = new ZstdCompressor(); byte[] compressed = new byte[toIntExact(compressor.maxCompressedLength(json.length))]; int outputSize = compressor.compress(json, 0, json.length, compressed, 0, compressed.length); String base32 = base32Hex().encode(compressed, 0, outputSize); return QualifiedName.of(PREFIX + signature.getName() + PREFIX + base32); } @JsonCreator  ResolvedFunction(
            @JsonProperty("signature") BoundSignature signature,
            @JsonProperty("id") FunctionId functionId,
            @JsonProperty("typeDependencies") Map<TypeSignature, Type> typeDependencies,
            @JsonProperty("functionDependencies") Set<ResolvedFunction> functionDependencies); @JsonProperty BoundSignature getSignature(); @JsonProperty("id") FunctionId getFunctionId(); @JsonProperty Map<TypeSignature, Type> getTypeDependencies(); @JsonProperty Set<ResolvedFunction> getFunctionDependencies(); static boolean isResolved(QualifiedName name); QualifiedName toQualifiedName(); static String extractFunctionName(QualifiedName qualifiedName); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void test() { ResolvedFunction resolvedFunction = createResolvedFunction("top", 3); ResolvedFunctionDecoder decoder = new ResolvedFunctionDecoder(TestResolvedFunction::varcharTypeLoader); Optional<ResolvedFunction> copy = decoder.fromQualifiedName(resolvedFunction.toQualifiedName()); assertTrue(copy.isPresent()); assertEquals(copy.get(), resolvedFunction); }