import { SdkContext } from "@azure-tools/typespec-client-generator-core";
import { Diagnostic, EmitContext } from "@typespec/compiler";
import { CSharpEmitterOptions } from "./options.js";
import { CSharpEmitterContext } from "./sdk-context.js";
import { CodeModel } from "./type/code-model.js";
import { Configuration } from "./type/configuration.js";
/**
 * Creates a code model by executing the full emission logic.
 * This function can be called by downstream emitters to generate a code model and collect diagnostics.
 *
 * @example
 * ```typescript
 * import { emitCodeModel } from "@typespec/http-client-csharp";
 *
 * export async function $onEmit(context: EmitContext<MyEmitterOptions>) {
 *   const updateCodeModel = (model: CodeModel, context: CSharpEmitterContext) => {
 *     // Customize the code model here
 *     return model;
 *   };
 *   const [, diagnostics] = await emitCodeModel(context, updateCodeModel);
 *   // Process diagnostics as needed
 *   context.program.reportDiagnostics(diagnostics);
 * }
 * ```
 *
 * @param context - The emit context
 * @param updateCodeModel - Optional callback to modify the code model before emission
 * @returns A tuple containing void and any diagnostics that were generated during the emission
 * @beta
 */
export declare function emitCodeModel(context: EmitContext<CSharpEmitterOptions>, updateCodeModel?: (model: CodeModel, context: CSharpEmitterContext) => CodeModel): Promise<[void, readonly Diagnostic[]]>;
/**
 * The entry point for the emitter. This function is called by the typespec compiler.
 * @param context - The emit context
 * @beta
 */
export declare function $onEmit(context: EmitContext<CSharpEmitterOptions>): Promise<void>;
export declare function createConfiguration(options: CSharpEmitterOptions, namespace: string, sdkContext: SdkContext): Configuration;
//# sourceMappingURL=emitter.d.ts.map