Connect with us


Rust Nibbles – Gazebo: Casts and transmute



This article was written in collaboration with Neil Mitchell, a Software Engineer in the Developer Infrastructure organization at Facebook.

The Rust library Gazebo contains a collection of well-tested Rust utilities in the form of standalone modules. In this series of blog posts, we will cover some of the modules that make up the Gazebo library. In today’s blog, we will cover the module Cast. This blog is a part of our Rust Nibbles series, where we go over the various Rust libraries we have open-sourced to learn more about what motivated their creation and how one can use them.

One of the appeals of Rust is that it tries its best to help you avoid dangerous mistakes – but there are still unsafe functions available. Rust has a function called transmute, which converts one type to another. For example, you can write:

let y = unsafe { transmute(x) }; 

This fragment converts from a u64 to a [u8; 8]; or from a String to a Vec<u8>; or from a &str to an &(). Alternatively stated, the above code might do anything, and for a function like transmute, you probably really care about precisely what it does. This realisation led us to introduce the Gazebo cast module, which provides more restrictive alternatives.

The first entry in the cast module is the transmute! macro. Morally, transmute is a function from an input type to an output type, which takes a value of the input type. While usually Rust inferring types for us is useful, for transmute it is often harmful. With transmute! as a macro we can take 3 arguments, two of them types, so can write:

free widgets for website
let y = unsafe { transmute!(u64, [u8; 8], x) }; 

It’s no less unsafe, but it’s much more explicit. Alternatively, using the existing transmute function you can write:

let y = unsafe { transmute::<u64, [u8; 8]>(x) }; 

And we are hopeful that one day Clippy can be extended to suggest giving the types explicitly.

See also  Facebook removes Ohio-based anti-vaccine group from platform

Specific casts

While transmute can do many conversions, in some cases there are preferred ways of converting between types. For example, if you try using transmute to convert from &Foo to &Bar, clippy will suggest &*(x as *const Foo as *const Bar). That’s quite verbose. But more importantly, it obscures what you are trying to do. Therefore, Gazebo provides cast::ptr(x) which wraps up this conversion for you. The cast module provides 5 specific conversions we’ve found useful:

pub fn ptr_to_usize<T: ?Sized>(x: &T) -> usize;
pub unsafe fn usize_to_ptr<'a, T>(x: usize) -> &'a T;
pub unsafe fn ptr<From, To>(x: &From) -> &To;
pub unsafe fn ptr_mut<From, To>(x: &mut From) -> &mut To;
pub unsafe fn ptr_lifetime<'a, 'b, T: ?Sized>(x: &'a T) -> &'b T; 

These are unsafe, all could be implemented as transmute, but are implemented as pointer conversions as that is the recommended form. The hope is these conversions make the intent clearer.

Unchecked transmute

The transmute function can be used to do lots of unsafe things. But sometimes, after a long day coding, do you wonder if transmute is a little too safe? In particular, transmute checks that the input and output types have the same size. That’s great for concrete type parameters, but means that you can’t convert a Vec<T> to a String without having the T specified at compile time. That restriction, while usually a very good thing, can sometimes be harmful – so we provide transmute_unchecked for those cases. It’s exactly like transmute, but without a compile-time check of equal sizes. If the sizes aren’t equal things are highly likely to segfault, and in fact, if any of the other transmute invariants don’t hold it is undefined behaviour. But having that more powerful function is sometimes necessary.

free widgets for website

We hope that this blog helps you understand the Cast module, how to use it and gives you good insight into what it does. Look out for our next blog in this series, where we discuss all the remaining little bits of Gazebo.

See also  Good Questions, Real Answers: How Facebook Helps Brands Protect Against Counterfeits

Be sure to check out our previous blogs in the Gazebo series to learn more about the various features the Gazebo library has to offer –
Gazebo – Prelude
Gazebo – Dupe
Gazebo – Variants
Gazebo – AnyLifetime
Gazebo – Comparisons

About the Rust Nibbles series

We at Facebook believe that Rust is an outstanding language that shines in critical issues such as memory safety, performance and reliability. We joined the Rust Foundation to help contribute towards the growth, advancement and adoption of Rust, and towards sustainable development of open source technologies and developer communities across the world.

This blog is a part of our Rust Nibbles series, where we go over the various Rust libraries we have open-sourced to learn more about what motivated their creation and how one can use them. We hope that this series helps you create amazing projects by using these libraries and encourages you to try them out.

To learn more about Facebook Open Source, visit our open source site, subscribe to our YouTube channel, or follow us on Twitter and Facebook.

free widgets for website

Facebook Developers

Continue Reading
Advertisement free widgets for website


Updates to Section 7 of the Developer Policies – Facebook Gaming Policies





We have updated Section 7 of the Developer Policies effective immediately. No change is required from the developers’ end, only awareness about these changes.

As part of our continuous focus on improving developers’ experience, we have made some updates to the Section 7 of the Developer Policies which covers all Facebook Gaming Products, such as Web Games on, Instant Games and Cloud Games. As part of this update we have removed outdated policies, and streamlined the language and structure of Section 7 to better reflect the existing state of our Facebook Gaming Products. We have also reorganized some policies under the Quality Guidelines. These updates do not introduce any product change, nor do they include any new requirements for developers.

Please review the updated Section 7 to familiarize yourself with the updated content structure.

First seen at

See also  Biden, Facebook help human trafficking on border
Continue Reading


Creating Apps with App Use Cases





With the goal of making Meta’s app creation process easier for developers to create and customize their apps, we are announcing the rollout of an updated process using App Use Cases instead of the former product-focused process. App Use Cases will enable developers to quickly create apps by selecting the use case that best represents their reason for creating an app.

Currently, the product-focused app creation process requires developers to select an app type and individually request permission to API endpoints. After listening to feedback from developers saying this process was, at times, confusing and difficult to navigate, we’re updating our approach that’s based on App Use Cases. With App Use Cases, user permissions and features will be bundled with each use case so developers can now confidently select the right data access for their needs. This change sets developers up for success to create their app and navigate app review, ensuring they only get the exact data access they need to accomplish their goals.

Starting today Facebook Login will be the first use case to become available to developers. This will be the first of many use cases that will be built into the app creation process that will roll out continually in 2023. For more information please reference our Facebook Login documentation.

First seen at

See also  Judge approves $650M Facebook privacy lawsuit settlement
Continue Reading


Understanding Authorization Tokens and Access for the WhatsApp Business Platform





The WhatsApp Business Platform makes it easy to send WhatsApp messages to your customers and automate replies. Here, we’ll explore authentication using the Cloud API, hosted by Meta.

We’ll start with generating and using a temporary access token and then replace it with a permanent access token. This tutorial assumes you’re building a server-side application and won’t need additional steps to keep your WhatsApp application secrets securely stored.

Managing Access and Authorization Tokens

First, let’s review how to manage authorization tokens and safely access the API.


Start by making sure you have a developer account on Meta for Developers. You’ll also need WhatsApp installed on a mobile device to send test messages to.

Creating an App

Before you can authenticate, you’ll need an application to authenticate you.

free widgets for website

Once you’re signed in, you see the Meta for Developers App Dashboard. Click Create App to get started.

Next, you’ll need to choose an app type. Choose Business.

After that, enter a display name for your application. If you have a business account to link to your app, select it. If not, don’t worry. The Meta for Developers platform creates a test business account you can use to experiment with the API. When done, click Create App.

Then, you’ll need to add products to your app. Scroll down until you see WhatsApp and click the Set up button:

Finally, choose an existing Meta Business Account or ask the platform to create a new one and click Continue:

free widgets for website

And with that, your app is created and ready to use. You’re automatically directed to the app’s dashboard.

Note that you have a temporary access token. For security reasons, the token expires in less than 24 hours. However, you can use it for now to test accessing the API. Later, we’ll cover how to generate a permanent access token that your server applications can use. Also, note your app’s phone number ID because you’ll need it soon.

See also  F8 Refresh Hackathon winners announced

Click the dropdown under the To field, and then click Manage phone number list.

In the popup that appears, enter the phone number of a WhatsApp account to send test messages to.

Then, scroll further down the dashboard page and you’ll see an example curl call that looks similar to this:

free widgets for website
curl -i -X POST -H 'Authorization: Bearer ' -H 'Content-Type: application/json' -d '{ "messaging_product": "whatsapp", "to": "", "type": "template", "template": { "name": "hello_world", "language": { "code": "en_US" } } }'

Note that the Meta for Developers platform inserts your app’s phone number ID and access token instead of the and placeholders shown above. If you have curl installed, paste the command into your terminal and run it. You should receive a “hello world” message in WhatsApp on your test device.

If you’d prefer, you can convert the curl request into an HTTP request in your programming language by simply creating a POST request that sets the Authorization and Content-Type headers as shown above, including the JSON payload in the request body.

Since this post is about authentication, let’s focus on that. Notice that you’ve included your app’s access token in the Authorization header. For any request to the API, you must set the Authorization header to Bearer .

Remember that you must use your token instead of the placeholder. Using bearer tokens will be familiar if you’ve worked with JWT or OAuth2 tokens before. If you’ve never seen one before, a bearer token is essentially a random secret string that you, as the bearer of the token, can present to an API to prove you’re allowed to access it.

Failure to include this header causes the API to return a 401 Unauthorized response code.

free widgets for website

Creating a Permanent Access Token

Knowing that you need to use a bearer token in the Authorization header of an HTTP request is helpful, but it’s not enough. The only access token you’ve seen so far is temporary. Chances are that you want your app to access the API for more than 24 hours, so you need to generate a longer-lasting access token.

Fortunately, the Meta for Developers platform makes this easy. All you need to do is add a System User to your business account to obtain an access token you can use to continue accessing the API. To create a system user, do the following:

  • Go to Business Settings.

  • Select the business account your app is associated with.
  • Below Users, click System Users.
  • Click Add.
  • Name the system user, choose Admin as the user role, and click Create System User.
  • Select the whatsapp_business_messaging permission.
  • Click Generate New Token.
  • Copy and save your token.

Your access token is a random string of letters and numbers. Now, try re-running the earlier request using the token you just created instead of the temporary one:

curl -i -X POST -H 'Authorization: Bearer ' -H 'Content-Type: application/json' -d '{ "messaging_product": "whatsapp", "to": "", "type": "template", "template": { "name": "hello_world", "language": { "code": "en_US" } } }'

Your test device should receive a second hello message sent via the API.

Best Practices for Managing Access Tokens

It’s important to remember that you should never embed an App Access Token in a mobile or desktop application. These tokens are only for use in server-side applications that communicate with the API. Safeguard them the same way you would any other application secrets, like your database credentials, as anyone with your token has access to the API as your business.

If your application runs on a cloud services provider like AWS, Azure, GCP, or others, those platforms have tools to securely store app secrets. Alternatively there are freely-available secret stores like Vault or Conjur. While any of these options may work for you, it’s important to evaluate your options and choose what works best for your setup. At the very least, consider storing access tokens in environment variables and not in a database or a file where they’re easy to find during a data breach.

free widgets for website


In this post, you learned how to create a Meta for Developers app that leverages the WhatsApp Business Platform. You now know how the Cloud API’s bearer access tokens work, how to send an access token using an HTTP authorization header, and what happens if you send an invalid access token. You also understand the importance of keeping your access tokens safe since an access token allows an application to access a business’ WhatsApp messaging capabilities.

Why not try using the Cloud API, hosted by Meta if you’re considering building an app for your business to manage WhatsApp messaging? Now that you know how to obtain and use access tokens, you can use them to access any endpoint in the API.

First seen at

Continue Reading