Issue:
[FEATURE] Use the newtype pattern for phone numbers

### Feature Description

This issue covers one of the problems mentioned in #119, about using [the newtype pattern](https://rust-unofficial.github.io/patterns/patterns/behavioural/newtype.html) for phone numbers. The requirement is that phone numbers must be validated once during construction/deserialization and should never be validated again. Please also include unit tests in your PR.

_For external contributors, clarify any questions you may have, and let us know that you're interested in picking this up. We'll assign this issue to you to reduce duplication of effort on the same task._

### Possible Implementation

You could use two newtypes for `PhoneNumber` and `PhoneCountryCode`. Also, implement `Serialize` and `Deserialize` on these two types.

The complexity involved in parsing phone numbers seems to be too high to be done all by ourselves, you could use the [Rust port of `libphonenumber`](https://github.com/whisperfish/rust-phonenumber) to help ease this task.

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

None

Resolution:
<think>
PR Context:
- Title: chore(common_utils): Apply the new type pattern for phone numbers
- Merged: 2023-06-16T18:16:57Z
- Files changed: 5 files
- Commits: 4 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [x] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
* Used the phonenumber crate to validate the phonenumber
* Implemented usual traits: FromStr, TryFrom, Deref, DerefMut, Queryable, FromSql, ToSql
* Used the testcase crate to write a few phone number validation unit tests

### Additional C
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** chore(common_utils): Apply the new type pattern for phone numbers (#1286)
Co-authored-by: rishavkar 
Files to modify:


**crates/common_utils/src/errors.rs**
  Modify existing code

**crates/common_utils/src/pii.rs**
  Add:
    - function: private::fmt
    - function: private::from_str
    - function: private::try_from
    - function: private::deref
    - function: private::deref_mut
    - function: private::build
    - function: private::from_sql
    - function: private::to_sql
    - function: private::test_valid_phone_number_default_masking
    - struct: pub::PhoneNumberStrategy
    - struct: pub::PhoneNumber
    - impl: impl Strategy<T> for PhoneNumberStrategy
    - impl: impl FromStr for PhoneNumber
    - impl: impl TryFrom<String> for PhoneNumber
    - impl: impl ops::Deref for PhoneNumber
    - impl: impl ops::DerefMut for PhoneNumber
    - impl: impl Queryable<diesel::sql_types::Text, DB> for PhoneNumber
    - impl: impl FromSql<sql_types::Text, DB> for PhoneNumber
    - impl: impl ToSql<sql_types::Text, DB> for PhoneNumber

**crates/common_utils/src/validation.rs**
  Add:
    - function: pub::validate_phone_number
    - function: private::test_validate_phone_number
    - function: private::test_invalid_phone_number