package officeconvertclient import ( "context" "fmt" "path/filepath" officeconvertapiv1 "github.com/end/officeconvert/gen/go/officeconvertapi/v1" ) // ConversionResult groups the terminal status and deck payload for one conversion. type ConversionResult struct { Status *officeconvertapiv1.GetConversionStatusResponse Deck *officeconvertapiv1.SlideDeck } // ConvertPPTXFile runs the full create-upload-start-wait-fetch flow. func (c *Client) ConvertPPTXFile(ctx context.Context, localPPTXPath string) (*ConversionResult, error) { createRes, err := c.CreateConversion(ctx, filepath.Base(localPPTXPath)) if err != nil { return nil, fmt.Errorf("create conversion: %w", err) } if err := c.UploadPPTX(ctx, createRes.UploadUrl, localPPTXPath); err != nil { return nil, err } if _, err := c.StartConversion(ctx, createRes.ConversionId); err != nil { return nil, fmt.Errorf("start conversion: %w", err) } statusRes, err := c.WaitForCompletion(ctx, createRes.ConversionId) if err != nil { return nil, fmt.Errorf("wait for completion: %w", err) } deckRes, err := c.GetSlideDeck(ctx, createRes.ConversionId) if err != nil { return nil, fmt.Errorf("get slide deck: %w", err) } return &ConversionResult{ Status: statusRes, Deck: deckRes.SlideDeck, }, nil }