public DynamicSchema convert(String name, T source, Map<String, ProtoFileElement> dependencies) 
        throws Descriptors.DescriptorValidationException {
        
        DynamicSchemaConverter<T> converter = getConverter();
        ProtoElementSchemaConvert elementSchemaConvert = new ProtoElementSchemaConvert();
        DynamicSchema.Builder schema = DynamicSchema.newBuilder();

        // Set basic properties
        Optional.ofNullable(converter.getSyntax(source))
            .ifPresent(schema::setSyntax);

        Optional.ofNullable(converter.getPackageName(source))
            .ifPresent(schema::setPackage);

        // Process types
        for (TypeElement typeElem : converter.getTypes(source)) {
            if (typeElem instanceof MessageElement) {
                MessageElement messageElement = (MessageElement) typeElem;
                schema.addMessageDefinition(elementSchemaConvert.convert(messageElement));
            } else if (typeElem instanceof EnumElement) {
                EnumElement enumElement = (EnumElement) typeElem;
                schema.addEnumDefinition(elementSchemaConvert.convert(enumElement));
            }
        }

        // Process imports and dependencies
        processImportsAndDependencies(schema, source, converter, dependencies);

        // Process options
        processSchemaOptions(schema, converter.getOptions(source));

        schema.setName(name);
        return schema.build();
    }
Converts the source object into a DynamicSchema.
This method implements the template method pattern, defining the skeleton of the conversion algorithm
while delegating specific conversion steps to the converter.

@param name The name of the schema
@param source The source object to convert
@param dependencies Map of dependencies
@return The converted DynamicSchema
@throws Descriptors.DescriptorValidationException if validation fails
core/src/main/java/kafka/automq/table/deserializer/proto/parse/template/DynamicSchemaTemplate.java