// Code generated by cmd/RolesGenerator DO NOT EDIT.
// If you need to refresh the content, run go generate again
package storage

import "slices"

func CollapseRolesIntoOne(roles ...*Role) Role {
  startingRole := RoleDeepCopy(&DefaultUserRole)
  slices.SortFunc(roles, func(a, b *Role) int { return int(int64(a.Priority)-int64(b.Priority)) })
  for _, role := range roles {
    if role.CanSupressInteractionsBetweenUsers != nil {
      *startingRole.CanSupressInteractionsBetweenUsers = *role.CanSupressInteractionsBetweenUsers
    }
    if role.CanQuote != nil {
      *startingRole.CanQuote = *role.CanQuote
    }
    if role.CanIncludeSurvey != nil {
      *startingRole.CanIncludeSurvey = *role.CanIncludeSurvey
    }
    if role.BlockedUsers != nil {
      startingRole.BlockedUsers = append(startingRole.BlockedUsers, role.BlockedUsers...)
    }
    if role.AutoCwPostsText != nil {
      *startingRole.AutoCwPostsText = *role.AutoCwPostsText
    }
    if role.ScanCreatedLocalNotes != nil {
      *startingRole.ScanCreatedLocalNotes = *role.ScanCreatedLocalNotes
    }
    if role.WithholdNotesForManualApproval != nil {
      *startingRole.WithholdNotesForManualApproval = *role.WithholdNotesForManualApproval
    }
    if role.FullAdmin != nil {
      *startingRole.FullAdmin = *role.FullAdmin
    }
    if role.CanManageAvatarDecorations != nil {
      *startingRole.CanManageAvatarDecorations = *role.CanManageAvatarDecorations
    }
    if role.CanSendCustomEmotes != nil {
      *startingRole.CanSendCustomEmotes = *role.CanSendCustomEmotes
    }
    if role.CanSendCustomReactions != nil {
      *startingRole.CanSendCustomReactions = *role.CanSendCustomReactions
    }
    if role.CanSendLocalNotes != nil {
      *startingRole.CanSendLocalNotes = *role.CanSendLocalNotes
    }
    if role.CanSendPrivateNotes != nil {
      *startingRole.CanSendPrivateNotes = *role.CanSendPrivateNotes
    }
    if role.AutoNsfwMedia != nil {
      *startingRole.AutoNsfwMedia = *role.AutoNsfwMedia
    }
    if role.ScanCreatedPublicNotes != nil {
      *startingRole.ScanCreatedPublicNotes = *role.ScanCreatedPublicNotes
    }
    if role.CanBoost != nil {
      *startingRole.CanBoost = *role.CanBoost
    }
    if role.AutoCwPosts != nil {
      *startingRole.AutoCwPosts = *role.AutoCwPosts
    }
    if role.WithholdNotesBasedOnRegex != nil {
      *startingRole.WithholdNotesBasedOnRegex = *role.WithholdNotesBasedOnRegex
    }
    if role.CanSendAnnouncements != nil {
      *startingRole.CanSendAnnouncements = *role.CanSendAnnouncements
    }
    if role.CanManageAds != nil {
      *startingRole.CanManageAds = *role.CanManageAds
    }
    if role.CanIncludeLinks != nil {
      *startingRole.CanIncludeLinks = *role.CanIncludeLinks
    }
    if role.CanSubmitReports != nil {
      *startingRole.CanSubmitReports = *role.CanSubmitReports
    }
    if role.CanLogin != nil {
      *startingRole.CanLogin = *role.CanLogin
    }
    if role.MentionLimit != nil {
      *startingRole.MentionLimit = *role.MentionLimit
    }
    if role.ScanCreatedFollowerOnlyNotes != nil {
      *startingRole.ScanCreatedFollowerOnlyNotes = *role.ScanCreatedFollowerOnlyNotes
    }
    if role.CanOverwriteDisplayNames != nil {
      *startingRole.CanOverwriteDisplayNames = *role.CanOverwriteDisplayNames
    }
    if role.CanSendMedia != nil {
      *startingRole.CanSendMedia = *role.CanSendMedia
    }
    if role.CanSendFollowerOnlyNotes != nil {
      *startingRole.CanSendFollowerOnlyNotes = *role.CanSendFollowerOnlyNotes
    }
    if role.CanChangeDisplayName != nil {
      *startingRole.CanChangeDisplayName = *role.CanChangeDisplayName
    }
    if role.DisallowInteractionsWith != nil {
      startingRole.DisallowInteractionsWith = append(startingRole.DisallowInteractionsWith, role.DisallowInteractionsWith...)
    }
    if role.CanViewDeletedNotes != nil {
      *startingRole.CanViewDeletedNotes = *role.CanViewDeletedNotes
    }
    if role.CanRecoverDeletedNotes != nil {
      *startingRole.CanRecoverDeletedNotes = *role.CanRecoverDeletedNotes
    }
    if role.ScanCreatedPrivateNotes != nil {
      *startingRole.ScanCreatedPrivateNotes = *role.ScanCreatedPrivateNotes
    }
    if role.WithholdNotesRegexes != nil {
      startingRole.WithholdNotesRegexes = append(startingRole.WithholdNotesRegexes, role.WithholdNotesRegexes...)
    }
    if role.CanManageCustomEmotes != nil {
      *startingRole.CanManageCustomEmotes = *role.CanManageCustomEmotes
    }
    if role.CanMentionOthers != nil {
      *startingRole.CanMentionOthers = *role.CanMentionOthers
    }
    if role.HasMentionCountLimit != nil {
      *startingRole.HasMentionCountLimit = *role.HasMentionCountLimit
    }
    if role.CanAffectOtherAdmins != nil {
      *startingRole.CanAffectOtherAdmins = *role.CanAffectOtherAdmins
    }
    if role.CanAssignRoles != nil {
      *startingRole.CanAssignRoles = *role.CanAssignRoles
    }
    if role.CanSendPublicNotes != nil {
      *startingRole.CanSendPublicNotes = *role.CanSendPublicNotes
    }
    if role.CanSendReplies != nil {
      *startingRole.CanSendReplies = *role.CanSendReplies
    }
    if role.CanDeleteNotes != nil {
      *startingRole.CanDeleteNotes = *role.CanDeleteNotes
    }
    if role.CanConfirmWithheldNotes != nil {
      *startingRole.CanConfirmWithheldNotes = *role.CanConfirmWithheldNotes
    }
  }
  return startingRole
}


func RoleDeepCopy(o *Role) Role {
  n := Role{}
  n.Model = o.Model
  n.Name = o.Name
  n.Priority = o.Priority
  n.IsUserRole = o.IsUserRole
  n.IsBuiltIn = o.IsBuiltIn
  if o.CanOverwriteDisplayNames == nil { n.CanOverwriteDisplayNames = nil } else {
      t := *o.CanOverwriteDisplayNames
      n.CanOverwriteDisplayNames = &t
    }
  if o.CanManageAds == nil { n.CanManageAds = nil } else {
      t := *o.CanManageAds
      n.CanManageAds = &t
    }
  if o.CanIncludeLinks == nil { n.CanIncludeLinks = nil } else {
      t := *o.CanIncludeLinks
      n.CanIncludeLinks = &t
    }
  if o.CanSubmitReports == nil { n.CanSubmitReports = nil } else {
      t := *o.CanSubmitReports
      n.CanSubmitReports = &t
    }
  if o.CanLogin == nil { n.CanLogin = nil } else {
      t := *o.CanLogin
      n.CanLogin = &t
    }
  if o.MentionLimit == nil { n.MentionLimit = nil } else {
      t := *o.MentionLimit
      n.MentionLimit = &t
    }
  if o.ScanCreatedFollowerOnlyNotes == nil { n.ScanCreatedFollowerOnlyNotes = nil } else {
      t := *o.ScanCreatedFollowerOnlyNotes
      n.ScanCreatedFollowerOnlyNotes = &t
    }
  if o.CanRecoverDeletedNotes == nil { n.CanRecoverDeletedNotes = nil } else {
      t := *o.CanRecoverDeletedNotes
      n.CanRecoverDeletedNotes = &t
    }
  if o.CanSendMedia == nil { n.CanSendMedia = nil } else {
      t := *o.CanSendMedia
      n.CanSendMedia = &t
    }
  if o.CanSendFollowerOnlyNotes == nil { n.CanSendFollowerOnlyNotes = nil } else {
      t := *o.CanSendFollowerOnlyNotes
      n.CanSendFollowerOnlyNotes = &t
    }
  if o.CanChangeDisplayName == nil { n.CanChangeDisplayName = nil } else {
      t := *o.CanChangeDisplayName
      n.CanChangeDisplayName = &t
    }
  n.DisallowInteractionsWith = slices.Clone(o.DisallowInteractionsWith)
  if o.CanViewDeletedNotes == nil { n.CanViewDeletedNotes = nil } else {
      t := *o.CanViewDeletedNotes
      n.CanViewDeletedNotes = &t
    }
  if o.ScanCreatedPrivateNotes == nil { n.ScanCreatedPrivateNotes = nil } else {
      t := *o.ScanCreatedPrivateNotes
      n.ScanCreatedPrivateNotes = &t
    }
  n.WithholdNotesRegexes = slices.Clone(o.WithholdNotesRegexes)
  if o.CanManageCustomEmotes == nil { n.CanManageCustomEmotes = nil } else {
      t := *o.CanManageCustomEmotes
      n.CanManageCustomEmotes = &t
    }
  if o.CanMentionOthers == nil { n.CanMentionOthers = nil } else {
      t := *o.CanMentionOthers
      n.CanMentionOthers = &t
    }
  if o.HasMentionCountLimit == nil { n.HasMentionCountLimit = nil } else {
      t := *o.HasMentionCountLimit
      n.HasMentionCountLimit = &t
    }
  if o.CanAffectOtherAdmins == nil { n.CanAffectOtherAdmins = nil } else {
      t := *o.CanAffectOtherAdmins
      n.CanAffectOtherAdmins = &t
    }
  if o.CanAssignRoles == nil { n.CanAssignRoles = nil } else {
      t := *o.CanAssignRoles
      n.CanAssignRoles = &t
    }
  if o.CanSendPublicNotes == nil { n.CanSendPublicNotes = nil } else {
      t := *o.CanSendPublicNotes
      n.CanSendPublicNotes = &t
    }
  if o.CanSendReplies == nil { n.CanSendReplies = nil } else {
      t := *o.CanSendReplies
      n.CanSendReplies = &t
    }
  if o.CanDeleteNotes == nil { n.CanDeleteNotes = nil } else {
      t := *o.CanDeleteNotes
      n.CanDeleteNotes = &t
    }
  if o.CanConfirmWithheldNotes == nil { n.CanConfirmWithheldNotes = nil } else {
      t := *o.CanConfirmWithheldNotes
      n.CanConfirmWithheldNotes = &t
    }
  if o.WithholdNotesForManualApproval == nil { n.WithholdNotesForManualApproval = nil } else {
      t := *o.WithholdNotesForManualApproval
      n.WithholdNotesForManualApproval = &t
    }
  if o.CanSupressInteractionsBetweenUsers == nil { n.CanSupressInteractionsBetweenUsers = nil } else {
      t := *o.CanSupressInteractionsBetweenUsers
      n.CanSupressInteractionsBetweenUsers = &t
    }
  if o.CanQuote == nil { n.CanQuote = nil } else {
      t := *o.CanQuote
      n.CanQuote = &t
    }
  if o.CanIncludeSurvey == nil { n.CanIncludeSurvey = nil } else {
      t := *o.CanIncludeSurvey
      n.CanIncludeSurvey = &t
    }
  n.BlockedUsers = slices.Clone(o.BlockedUsers)
  if o.AutoCwPostsText == nil { n.AutoCwPostsText = nil } else {
      t := *o.AutoCwPostsText
      n.AutoCwPostsText = &t
    }
  if o.ScanCreatedLocalNotes == nil { n.ScanCreatedLocalNotes = nil } else {
      t := *o.ScanCreatedLocalNotes
      n.ScanCreatedLocalNotes = &t
    }
  if o.ScanCreatedPublicNotes == nil { n.ScanCreatedPublicNotes = nil } else {
      t := *o.ScanCreatedPublicNotes
      n.ScanCreatedPublicNotes = &t
    }
  if o.FullAdmin == nil { n.FullAdmin = nil } else {
      t := *o.FullAdmin
      n.FullAdmin = &t
    }
  if o.CanManageAvatarDecorations == nil { n.CanManageAvatarDecorations = nil } else {
      t := *o.CanManageAvatarDecorations
      n.CanManageAvatarDecorations = &t
    }
  if o.CanSendCustomEmotes == nil { n.CanSendCustomEmotes = nil } else {
      t := *o.CanSendCustomEmotes
      n.CanSendCustomEmotes = &t
    }
  if o.CanSendCustomReactions == nil { n.CanSendCustomReactions = nil } else {
      t := *o.CanSendCustomReactions
      n.CanSendCustomReactions = &t
    }
  if o.CanSendLocalNotes == nil { n.CanSendLocalNotes = nil } else {
      t := *o.CanSendLocalNotes
      n.CanSendLocalNotes = &t
    }
  if o.CanSendPrivateNotes == nil { n.CanSendPrivateNotes = nil } else {
      t := *o.CanSendPrivateNotes
      n.CanSendPrivateNotes = &t
    }
  if o.AutoNsfwMedia == nil { n.AutoNsfwMedia = nil } else {
      t := *o.AutoNsfwMedia
      n.AutoNsfwMedia = &t
    }
  if o.CanBoost == nil { n.CanBoost = nil } else {
      t := *o.CanBoost
      n.CanBoost = &t
    }
  if o.AutoCwPosts == nil { n.AutoCwPosts = nil } else {
      t := *o.AutoCwPosts
      n.AutoCwPosts = &t
    }
  if o.WithholdNotesBasedOnRegex == nil { n.WithholdNotesBasedOnRegex = nil } else {
      t := *o.WithholdNotesBasedOnRegex
      n.WithholdNotesBasedOnRegex = &t
    }
  if o.CanSendAnnouncements == nil { n.CanSendAnnouncements = nil } else {
      t := *o.CanSendAnnouncements
      n.CanSendAnnouncements = &t
    }
  return n
}
