You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: update_canonical_email_service.rb
    path of file: ./repos/gitlabhq/app/services/users
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

module Users
  class UpdateCanonicalEmailService
    extend ActiveSupport::Concern

    INCLUDED_DOMAINS_PATTERN = [/gmail.com/].freeze

    def initialize(user:)
      raise ArgumentError, "Please provide a user" unless user.is_a?(User)

      @user = user
    end

    def execute
      return unless user.e
    
    def execute
      return unless user.email
      return unless user.email.match? Devise.email_regexp

      canonical_email = canonicalize_email

      unless canonical_email
        # the canonical email doesn't exist, probably because the domain doesn't match
        # destroy any UserCanonicalEmail record associated with this user
        user.user_canonical_email&.delete
        # nothing else to do here
        return
      end

      if user.user_canonical_email
        # update to the new value
        user.user_canonical_email.canonical_email = canonical_email
      else
        user.build_user_canonical_email(canonical_email: canonical_email)
      end
    end