diff --git a/resources/polly-lexicons.go b/resources/polly-lexicons.go new file mode 100644 index 000000000..5d61a8949 --- /dev/null +++ b/resources/polly-lexicons.go @@ -0,0 +1,70 @@ +package resources + +import ( + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/polly" + "github.com/rebuy-de/aws-nuke/v2/pkg/types" +) + +type PollyLexicon struct { + svc *polly.Polly + name *string + attributes *polly.LexiconAttributes +} + +func init() { + register("PollyLexicon", ListPollyLexicons) +} + +func ListPollyLexicons(sess *session.Session) ([]Resource, error) { + svc := polly.New(sess) + resources := []Resource{} + var nextToken *string + + for { + listLexiconsInput := &polly.ListLexiconsInput{ + NextToken: nextToken, + } + + listOutput, err := svc.ListLexicons(listLexiconsInput) + if err != nil { + return nil, err + } + for _, lexicon := range listOutput.Lexicons { + resources = append(resources, &PollyLexicon{ + svc: svc, + name: lexicon.Name, + attributes: lexicon.Attributes, + }) + } + + // Check if there are more results + if listOutput.NextToken == nil { + break // No more results, exit the loop + } + + // Set the nextToken for the next iteration + nextToken = listOutput.NextToken + } + return resources, nil +} + +func (lexicon *PollyLexicon) Remove() error { + deleteInput := &polly.DeleteLexiconInput{ + Name: lexicon.name, + } + _, err := lexicon.svc.DeleteLexicon(deleteInput) + return err +} + +func (lexicon *PollyLexicon) Properties() types.Properties { + properties := types.NewProperties() + properties.Set("Name", lexicon.name) + properties.Set("Alphabet", lexicon.attributes.Alphabet) + properties.Set("LanguageCode", lexicon.attributes.LanguageCode) + properties.Set("LastModified", lexicon.attributes.LastModified.Format(time.RFC3339)) + properties.Set("LexemesCount", lexicon.attributes.LexemesCount) + properties.Set("LexiconArn", lexicon.attributes.LexiconArn) + properties.Set("Size", lexicon.attributes.Size) + return properties +}